基于sshpass
在hosts.list 文件中提前写好需要key验证的机器IP
[root@centos8 ~]# cat hosts.list
10.0.0.1
10.0.0.2
10.0.0.3
#!/bin/bash
exec 1> /dev/null
rpm -q sshpass || yum -y install sshpass
[ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null
while read IP
do
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no $IP
done < hosts.list
也可以将需要key验证机器的IP存入变量中
#!/bin/bash
exec 1> /dev/null
IPLIST="
10.0.0.1
10.0.0.2
10.0.0.3
"
rpm -q sshpass || yum -y install sshpass
[ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null
for IP in $IPLIST
do
sshpass -p 123456 ssh-copy-id -o StrictHostKeyChecking=no $IP
done
基于expect
#!/bin/bash
rpm -q expect &> /dev/null || yum -y install expect &> /dev/null
[ -f /root/.ssh/id_rsa ] || ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa &> /dev/null
PASS=123456
while read IP
do
expect &> /dev/null <<EOF # 或者expect << EOF &> /dev/null
set timeout 20
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$IP
expect {
"yes/no" { send "yes
";exp_continue }
"password" { send "$PASS" }
}
expect eof
EOF
echo "$IP is ready"
done < hosts.list