批量实现多台服务器之间ssh无密码登录的相互信任
? 所有文件的github位置:https://github.com/tobewithyou1996/ssh-batch-believe.git ?便于下载,直接复制容易有编码问题。 思路:将所有主机的公钥文件都收集到一台主机,最后将包含所有主机的公钥文件添加到每一台主机。 主要文件有? believe.sh? ,sshcopy.exp ,sshkeygen.exp,hosts文件 1. believe.sh文件 #!/bin/bash #检查本地是否有密钥文件,没有则添加。 ./sshkeygen.exp #循环取出ip和密码 for i in $(cat ./hosts ) do #取出ip和密码 IP=$(echo "${i}" |awk -F:" '{print $1}') PW=$({print $2}) #将本地的公钥复制到远程主机 ./sshcopy.exp $IP $PW #将脚本sshkeygen.exp复制到远程主机 scp -p ./sshkeygen.exp $IP:/root/ #远程主机安装expect ssh root@$IP yum install expect -y " #远程主机创建密钥文件 /root/sshkeygen.exp& #将远程主机的公钥添加到本地authorized_keys文件 cat ~/.ssh/*.pub" >>./authorized_keys done #将本地的公钥复制到远程主机 hosts) IP=$() 2. sshcopy.exp #!/usr/bin/expect -d set ip [lindex $argv 0] set pw [lindex $argv 1] set timeout 60 spawn ssh-copy-id $ip expect { #*yes/no" {send yesr"; exp_continue} 3. sshkeygen.exp #!/usr/bin/expect -d set timeout 90ssh-keygen expect { .ssh/id_rsar;exp_continue} Overwrite (y/n)? exit Enter passphraseEnter same passphrase again:} } expect eof 4. hosts文件 149.28.244.75:*p8V1xGV{7)%sQdV! 245.101:K(1q@jsHvM@dUVZtk ? 注意事项:believe.sh,sshcopy.exp,sshkeygen.exp 三个文件都要具有可执行权限。 sshcopy.exp文件的第七行需要注意,根据自己的情况进行是否注释。 这里的expect脚本都开启了调试参数,可不开启 ? 这里还有些问题没有解决就是当我们第一次去远程登陆主机的时候还是要询问我们是否连接远程主机, 解决办法: 1. 在所有的主机上面,我们需要在/etc/ssh/ssh_config 将# StrictHostKeyChecking ask 修改为 StrictHostKeyChecking no。 2.将一台包含所有主机的known_hosts文件的文件上传到所有的主机上。 3.或者在使用ssh时加上-o GSSAPIAuthentication=no? 这样也可以避免询问。 [root@vultr ~]# ssh -o StrictHostKeyChecking=no 144.202.16.12 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |