参考自:https://blog.csdn.net/zhanggqianglovec/article/details/103384458
准备工作:
- 安装expect
yum install expect -y
#!/usr/bin/bash
expect << EOF
set timeout 10
# 创建公有密钥
spawn ssh-keygen -t rsa
expect {
"*to save the key" {send "\n";exp_continue}
"*(y/n)" {send "y\r";exp_continue}
"Enter passphrase" {send "\n";exp_continue}
"Enter same passphrase" {send "\n";exp_continue}
}
EOF
# 获取/etc/hosts文件中除localhost的映射关系
ip_list=`grep -v 'localhost' /etc/hosts | awk -F ' ' '{print $1,$2}'`
for ip in $ip_list
do
expect << EOF
set timeout 2
# 发送公有密钥
spawn ssh-copy-id root@$ip
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "root\r";exp_continue}
}
# 拷贝/etc/hosts文件到远程机器
spawn scp /etc/hosts $ip:/etc
expect {
"yes/no" {send "yes\r";exp_continue}
"password" {send "root\r";exp_continue}
}
EOF
done
#!/usr/bin/bash
#ip列表&登录密码
passwd='huqy'
ip_list=("192.168.88.128" "192.168.88.130" "192.168.88.131")
for ip in ${ip_list[*]}
do
# 生成秘钥对
expect << EOF
set timeout 2
spawn ssh root@$ip
expect {
"yes/no" { send "yes\n";exp_continue }
"password" { send "$passwd\n"}
}
expect {
"*#" {send "ssh-keygen -t rsa\r";exp_continue}
"*to save the key" {send "\n";exp_continue}
"Overwrite (y/n)" {send "y\r";exp_continue}
"Enter passphrase" {send "\n";exp_continue}
"Enter same passphrase" {send "\n"}
}
expect {"*#" {send "exit\r"}}
EOF
done