使用expect批量分发公钥 ssh免密码登录

安装expect

yum install expect

生成公钥和私钥

cd ~/.ssh/
ssh-keygen -t rsa  #一直回车,采用默认的文件名字,使用空密码,会得到id_rsa和id_rsa.pub文件

批量部署ssh公钥到目标机器

cd /tmp/

ip.txt(前面是IP,后面是密码,用冒号:分割)    
===============================
192.168.44.11:vagrant
192.168.44.12:vagrant
192.168.44.13:vagrant
===============================
remote_operate.sh(把该文件的权限设置为777,防止在目标主机执行时报没有权限错误)
#!/bin/bash
if [ ! -d /root/.ssh ];then
mkdir /root/.ssh
fi
cat /tmp/id_rsa.pub >> /root/.ssh/authorized_keys
===============================
batch_sshkey.sh(把id_rsa.pub和remote_operate.sh拷贝到目标机器上)
#!/bin/bash
for i in `cat /tmp/ip.txt`
do
ip=$(echo "$i"|cut -f1 -d":")
password=$(echo "$i"|cut -f2 -d":")

expect -c "
spawn scp /root/.ssh/id_rsa.pub /tmp/remote_operate.sh  root@$ip:/tmp/
        expect {
                \"*yes/no*\" {send \"yes\r\"; exp_continue}
                \"*password*\" {send \"$password\r\"; exp_continue}
                \"*Password*\" {send \"$password\r\";}
        }
"
expect -c "
spawn ssh root@$ip "/tmp/remote_operate.sh"
        expect {
                \"*yes/no*\" {send \"yes\r\"; exp_continue}
                \"*password*\" {send \"$password\r\"; exp_continue}
                \"*Password*\" {send \"$password\r\";}
        }
"
done
===============================

执行脚本

/bin/bash  batch_sshkey.sh

登录目标主机

ssh [email protected]
exit
ssh [email protected]
exit
ssh [email protected]
exit

原理

所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

总结

  • 实现免密码登录目标机器,只需要把当前机器的id_rsa.pub内容追加到目标机器的/root/.ssh/authorized_keys中去。
  • 使用except可以批量往目标机器分发文件,在目标机器执行分发过去的文件

你可能感兴趣的:(使用expect批量分发公钥 ssh免密码登录)