前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SSH 免密登录 SHELL安装脚本

SSH 免密登录 SHELL安装脚本

原创
作者头像
大大刺猬
修改2020-04-13 14:41:55
2.2K0
修改2020-04-13 14:41:55
举报
文章被收录于专栏:大大刺猬大大刺猬

问题描述:服务器多了,ssh远程服务器的时候输密码输到怀疑人生,一两次还行,次数多了,恼火得很

于是就有了这么个脚本,吧自己的公钥拷贝到目标主机~/.ssh/authorized_keys文件里,使其信任本主机的当前用户

使用方法:执行安装脚本sshNopasswd_install.sh 即可生成 /usr/bin/sshNopasswd 这个脚本。(点击下载,或者文末自己复制也行)

这个功能也被ddcwRPM包包含

sshNopasswd [用户名@]主机名 [密码]

代码语言:javascript
复制
sh sshNopasswd_install.sh       #只有第一次安装的时候才执行,安装好了,后面就可以直接用了
sshNopasswd 192.168.101.171     #用户名和SSH一样,可以省略,默认是当前用户,不跟密码的话,就会提示输入密码(推荐)
ssh 192.168.101.171              #这台服务器连接192.168.101.171 现在及以后登录都不用输密码了(除非自己的密钥换了)              

例子:

安装脚本,sshNopasswd连接服务器,并输入密码
安装脚本,sshNopasswd连接服务器,并输入密码

测试:

之后ssh连接该服务器就不用输密码了
之后ssh连接该服务器就不用输密码了

安装脚本sshNopasswd_install.sh内容如下:

代码语言:javascript
复制
#!/bin/bash
#write by ddcw at 20200410
thiscript=$0
function exits(){
  echo -e "[`date +%Y%m%d-%H:%M:%S`] \033[31;40m$1\033[0m"
  exit 0
}
function install_sshNopasswd(){
	[ -f /usr/bin/sshNopasswd ] && exits "this OS has /usr/bin/sshNopasswd"
	tail -n +19 ${thiscript} > /usr/bin/sshNopasswd
	chmod 777 /usr/bin/sshNopasswd
	echo -e "[`date +%Y%m%d-%H:%M:%S`] [\033[32;40mINSTALL FINISH\033[0m] \033[31;40m you can run \033[0m \033[32;40msshNopasswd -h\033[0m \033[31;40mto get help\033[0m"
	exit 0 
}
[ -z $1 ] && install_sshNopasswd



#!/bin/env bash
#write by ddcw at 20200410


dt=$(date +%Y%m%d-%H%M%S)

function get_ssh_keygen() {
	tpe=$1
        expect << EOF
        set timeout 30
        spawn  /usr/bin/ssh-keygen -t ${tpe}
        expect {
                        "sa):" {send "\r";exp_continue}
                        "passphrase):" {send "\r";exp_continue}
                        "again:" {send "\r"}
        }
        expect eof
EOF
}
function scp_file_auto(){
        [ $# -eq 3 ] || echo_color red "script has internal err DDCW_0001"
        password=$3
        dir_tmp=$1
        host_and_dir=$2
        expect << EOF
        set timeout 30
        spawn scp ${dir_tmp} ${host_and_dir}
        expect {
                        "(yes/no" {send "yes\r";exp_continue}
                        "password:" {send "${password}\r"}
        }
        expect eof
EOF
}
function ssh_command(){
#        [ $# -eq 3 ] || echo_color red "script has internal err DDCW_0003"
        user=`echo $1 | awk -F "@" '{print $1}'` ||  echo_color red "script has internal err DDCW_0004"
        user_host=$1
        commd=$2
        password=$3
        expect << EOF
        set timeout 30
        spawn ssh ${user_host} ${commd}
        expect {
                        "(yes/no" {send "yes\r";exp_continue}
                        "password:" {send "${password}\r"}
        }
        expect "${user}@*" {send "exit\r"}
        expect eof
EOF
}


function help_this_script() {
	echo '---------------------------------------'
	echo 'sshNopasswd [USER]@HOSTNAME [PASSWORD] '
	echo "example: sshNopasswd $(whoami)@$(last | head -1 | awk '{print $3}') "
	echo '---------------------------------------'
	exit 0
}

case $1 in
	-h|-H|h|H|help|HELP|-help|-HELP|--help|--HELP|help=y|HELP=Y|?|-?)
		help_this_script;;
esac
	
if [ ! -f ~/.ssh/id_rsa ]
then
mv ~/.ssh ~/.ssh${dt}
get_ssh_keygen rsa
get_ssh_keygen dsa
fi
if [ ! -f ~/.ssh/id_rsa.pub ]
then
mv ~/.ssh ~/.ssh${dt}
get_ssh_keygen rsa
get_ssh_keygen dsa
fi

if [ ! -f ~/.ssh/id_dsa ]
then
mv ~/.ssh ~/.ssh${dt}
get_ssh_keygen dsa
get_ssh_keygen rsa
fi
if [ ! -f ~/.ssh/id_dsa.pub ]
then
mv ~/.ssh ~/.ssh${dt}
get_ssh_keygen dsa
get_ssh_keygen rsa
fi

[ -f ~/.ssh${dt}/authorized_keys ] && cp ~/.ssh${dt}/authorized_keys ~/.ssh/authorized_keys


ssh_rsa_pub=$(cat  ~/.ssh/id_rsa.pub | awk '{print $1 " " $2}')
ssh_dsa_pub=$(cat  ~/.ssh/id_dsa.pub | awk '{print $1 " " $2}')

[ -z ${2} ] && read -t 60 -p "please input ${1} password:" password
[ -z ${2} ] || export password=$2

ssh_command $1 'mkdir -p touch ~/.ssh' ${password}
ssh_command $1 '\[ -f ~/.ssh/authorized_keys \] || touch ~/.ssh/authorized_keys' ${password}
ssh_command $1 " grep '${ssh_rsa_pub}' ~/.ssh/authorized_keys >/dev/null || echo '${ssh_rsa_pub}' >> ~/.ssh/authorized_keys" ${password}
ssh_command $1 " grep '${ssh_dsa_pub}' ~/.ssh/authorized_keys >/dev/null || echo '${ssh_dsa_pub}' >> ~/.ssh/authorized_keys" ${passwd}

隐藏TIPS:su切换用户也要输密码,于是可以这样:ssh oracle@127.0.0.1 来,下次的话,直接ssh这个用户就可以了,我6不6(太6了^_|+)

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述:服务器多了,ssh远程服务器的时候输密码输到怀疑人生,一两次还行,次数多了,恼火得很
  • 例子:
    • 测试:
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档