使用python设置rsa public key 免密免提示ssh连接服务器的代码

1.背景

现在做的游戏项目,滚服方式,部署了许多服务器,由于成本等历史原因,没有运维人员,也没有用fabric等运维工具,现在使用其中一台作为发布更新服务器,使用原始shell脚本的ssh root@ip command方式批量执行远程命令比如scp,mysql,awk,sed,甚至先scp把pyton脚本shell脚本拷贝到目标服务器再执行等等组合。因为每次访问都要填yes or no和输入密码,1麻烦,2交互不方便各种脚本运行,所以需要直接连上去,直接执行命令。

2.思路

发布更新服务器id_rsa.pub公钥加入到目标服务器的.ssh/authorized_keys中从而实现使用key的方式登录。可以直接ssh连接执行命令而不要输入密码。

3.知识点

sshpass

sshpass -p '你的密码' [需要密码的命令]

可以不使用交互模式把密码传递给ssh scp等需要密码的命令。

ssh [目标ip] -o StrictHostKeyChecking=no ls

ssh ip -o StrictHostKeyChecking=no

不检查unknow host,也就是不用交互输入yes no,直接加到~/.ssh/know_host中去,下次就不用再提示The authenticity of host can't be established,而是直接加到know_host中去。ls是随便执行一个命令,不要真ssh连上去。

ssh-keygen

ssh-keygen -t rsa -C [email protected] -f /root/.ssh/id_rsa -P "" """

生成本地的rsa公钥和私钥,程序中判断了一下它存不存在,千万不要给覆盖了哇。

cat~/.ssh/id_rsa.pub|sshpass-p"%s"sshroot@%s'cat>>.ssh/authorized_keys'

上面命令组合,cat ~/.ssh/id_rsa.pub输出管道给后面这个命令: sshpass-p"目标root密码" ssh root@目标ip' cat >> .ssh/authorized_keys'

意思是把本地刚生成的id_rsa.pub追加到要连接的目标服务器的.ssh/authorized_keys中,从而实现直接ssh连接以后不需要输入密码。

ssh-copy-id -i ~/.ssh/id_rsa.pub " root@

ip"

ssh-copy-id命令

干的活和上面的一样,都是把key加入到目标服务器的.ssh/authorized_keys中

 

 

  1. 说明

python代码比较简单了就不解释了。拷贝的python代码缩进有问题,自己改改应该就可以用了。其实这个东西应该直接写shell。等我改成shell代码吧,都是执行命令,用python很奇怪,但是可读性好,用shell更直接,但是shell的刻度性真是差。

 

defauth_server(lang_ip):

no_host_check_cmd='sshpass -p "%s" ssh %s -o StrictHostKeyChecking=no ls'%(password,lang_ip)

logger.info('execute------------------->'+no_host_check_cmd)

os.system(no_host_check_cmd)

mk_ssh_dir_cmd='sshpass-p "%s" ssh % smkdir -p .ssh'%(password,lang_ip)

logger.info('execute-------------->'+mk_ssh_dir_cmd)

os.system(mk_ssh_dir_cmd)

If not os.path.isfile('/root/.ssh/id_rsa.pub'):

os.system("""ssh-keygen -t rsa -C [email protected] -f /root/.ssh/id_rsa -P "" """)

authorize_cmd="""cat ~/.ssh/id_rsa.pub | sshpass -p "%s" ssh root@%s 'cat>>.ssh/authorized_keys' """%(password,lang_ip)

logger.info('execute-->'+authorize_cmd)

os.system(authorize_cmd)

使用python设置rsa public key 免密免提示ssh连接服务器的代码_第1张图片

 

    思路是sshpass连接到目标服务器,设置 -o StrictHostKeyChecking=no, ls就是随便执行一个命令,省的ssh跳到了目标服务器。生成当前服务器的rsa公钥,然后把它加入到目标服务器的authorized_keys中,就可以直接ssh root@ip直接连接了。

 

 

你可能感兴趣的:(python)