拷贝ssh公钥到多台服务器上

这篇文章几乎是对Push SSH public keys to multiple host的翻译,谢谢该做者。

使用SSH登录、执行命令到远程机器须要输入密码,不少系统须要免输密码访问远程机器,好比hadoop主节点访问子节点时,这时能够使用ssh-copy-id命令将公钥拷贝到远程机器上,
好比: ssh-copy-id -i hduser@192.168.7.70

但如过面临不少机器,好比5,6,7,8台以上,通常会想到写个脚本,批量执行,但ssh-copy-id命令执行过程当中有两处须要人工参与,

一是当你看到以下提问时,必须对每台机器回答yes or no,

The authenticity of host 'myfirsthost.work.cainmanor.com (10.256.33.106)' can't be established.
RSA key fingerprint is fc:40:7c:de:b8:ac:a2:f5:d4:11:d0:0e:b2:77:8a:63.
Are you sure you want to continue connecting (yes/no)? yes

二是每台机器的密码,当你ssh-copy-id到每台机器时,须要输入访问这台机器的密码,

为了解决第一个问题,能够修改~/.ssh/config文件(没有则建立),把下面两行增长到该文件中,

StrictHostKeyChecking no
UserKnownHostsFile=/dev/null

在完成全部SSH拷贝动做后,记得用#号键注释掉(不注释也没事。。。)。

为了解决第二个问题,能够使用sshpass工具,该工具可能须要下载,我在Centos上须要手动下载rpm包安装。sshpass为ssh提供所需的密码,能够执行以下命令,

sshpass -p 'PASSWORD' ssh-copy-id hduser@host

实际操做时,会把上面这条命令放到像下面这样的脚本文件里,并提供hosts文件,hosts文件记录全部须要拷贝公钥的机器,

for X in `cat hosts`
do
sshpass -p 'PASSWORD' ssh-copy-id hduser@${X}
done

hosts文件记录host信息这种模式在批量执行ssh命令很常见。

在完成SSH公钥拷贝后,能够选择pssh工具批量执行命令。ssh

相关文章
相关标签/搜索