linux 批量建立信任关系
首先,需要检查expect是否安装:rpm -qa|grep expect
然后,在操作机上创建公钥:ssh-keygen 一路回车即可
创建好之后到/home/barfoo/.ssh/下就可以看到id开头的2个文件,其中id_rsa.pub就是公钥文件,
需要做的就是将这个文件传送给其他机器:ssh-copy-id -i /home/barfoo/.ssh/id_rsa.pub barfoo@ip
最后ssh root@ip就实现无密码登录了。
以下是脚本,根据自己实际情况做修
!/bin/bash
2017-05-18
批量ssh认证建立
for p in $(cat /home/barfoo/ip.txt) #注意ip.txt文件的绝对路径
do
ip=$(echo "$p"|cut -f1 -d":") #取ip.txt文件中的ip地址
password=$(echo "$p"|cut -f2 -d":") #取ip.txt文件中的密码
expect自动交互开始
expect -c "
spawn ssh-copy-id -i /home/barfoo/.ssh/id_rsa.pub barfoo@$ip
expect {
\"*yes/no*\" {send \"yes\r\"; exp_continue}
\"*password*\" {send \"$password\r\"; exp_continue}
\"*Password*\" {send \"$password\r\";}
}
"
done
通过ssh批量执行命令
for h in $(cat /home/barfoo/ip.txt|cut -f1 -d":")
do
ssh barfoo@$h '此处写要执行的命令'
如果命令是多行的,请参照下面
ssh barfoo@$h '此处写要执行的命令1'
ssh barfoo@$h '此处写要执行的命令2'
ssh barfoo@$h '此处写要执行的命令3'
done
ip.txt文件里面ip和密码写法
172.16.4.27:barfoo1
172.16.4.28:barfoo2
也可以这么写
!/bin/bash
for i in seq 101 150
do
/usr/bin/expect << EOF
spawn ssh-copy-id bfadmin@192.168.100.$i
expect {
"yes/no" { send "yes\r"; exp_continue; }
"*password" { send "bfadmin2017!@#\r" }
}
expect "~$ "
send "exit\r"
expect eof
EOF
done
最后更新:2017-05-23 13:32:00