#! /bin/bash
export user=root
export pass=123456
if [ -f /root/.ssh/id_rsa.* ];then
rm -rf /root/.ssh/* && echo "clear the .ssh dir"
ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q && echo "key create success"
else
ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa -q && echo "key create success"
fi
for ip in `cat ip.list.txt`
do
if [ -f /root/.ssh/id_rsa.* ];then
/usr/bin/expect << EOF
set timeout 60
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub $user@$ip
expect {
"(yes/no)?" {send "yes\r"; exp_continue} &> /dev/null
"password:" {send "$pass\r"} &> /dev/null
}
expect eof
EOF
else
echo "ssh key not create or something is wrong and exit this $0"
fi
done
这里我想要实现ssh来实现多台主机的免密登录,然后使用了这样的一个shell脚本来执行,首先设置其他的主机的用户root的密码是123456.其他的基本就是ssh远程登录的基础操作,然后自己的脚本这里 的for循环中是遍历ip.list.txt文件的,这个文件是用来存储其他主机的IP地址,从而实现多次操作ssh远程登录,然后就是/usr/bin/expect <<EOF这里,首先主机中得有expect这个包,没有就下载yum install expect -y ,下载完了之后先查看一下这个expect的位置,用which expect,根据自己主机中的路径进行相应的修改。还有一点就是设置超时时间这里set timeout 60 之前我设置的是超时时间是30 ,这个时候有的主机就会出现问题,所以这里设置稍微大一点比较好,或者去修改远程主机的反向解析,将UseDNS yes改成no,这里的UseDNS应该是被注释掉了,可以在加一行,也可以删掉#,但是建议还是重写一行比较好。这里进入远程主机的配置文件修改dns操作,首先vim /etc/ssh/sshd_config进入这个配置文件,然后/查找DNS,在这下面添加一行UseDNS no,这个会将反向解析关闭,就直接单通道进行ssh操作,就会快很多。