安装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 root@192.168.44.11
exit
ssh root@192.168.44.12
exit
ssh root@192.168.44.13
exit
原理
所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
总结
- 实现免密码登录目标机器,只需要把当前机器的id_rsa.pub内容追加到目标机器的/root/.ssh/authorized_keys中去。
- 使用except可以批量往目标机器分发文件,在目标机器执行分发过去的文件
网友评论