EXPECT交互式批量上传公钥
# vim key.sh
#/bin/bash Public_Key() { [ ! -f /usr/bin/expect ] && yum install expect -y &>/dev/null #判断expect是否安装,没有则安装expect(这个挺好用的) /usr/bin/expect <<EOF #在控制节点机器上生成密钥对,一种是从未生成过,一种是原来生成过(注意本脚本选择不覆盖) set timeout 30 spawn ssh-keygen expect "(/root/.ssh/id_rsa):" send " " expect { "Overwrite" { send "n " } "Enter passphrase (empty for no passphrase):" { send " " expect "Enter same passphrase again:" send " " } } expect eof EOF while read line;do #遍历循环/test/host_passwd.txt文件,批量上传公钥 host=$(echo $line | awk '{print $1}') passwd=$(echo $line | awk '{print $2}') /usr/bin/expect <<EOF spawn ssh-copy-id $host expect { "yes/no" { send "yes "; exp_continue } "password:" { send "$passwd "} } expect eof EOF done < /test/host_passwd.txt #主机ip及密码文件的绝对路径
} Public_Key && echo "now you can ssh ip" || echo "Please check your host_passwd.txt"
# cat /test/host_passwd.txt
192.168.10.10 123456 192.168.10.11 123456 192.168.10.12 123456 192.168.10.13 123456 ...
完成后删除 rm -rf /test/host_passwd.txt 即可