交互式创建秘钥:
#!/bin/bash
expect <<EOF
spawn ssh-keygen -t rsa
expect {
"*id_rsa):" { send "\r";exp_continue }
"*(y/n)?" { send "\r";exp_continue }
"*passphrase):" { send "\r";exp_continue }
"*again:" { send "\r" }
}
expect eof
EOF
脚本实现各主机之间的无密登录:(注:必须各主机的密码相同)
#!/bin/bash
# ./expect_key.sh 172.18.28.234 172.18.28.235 172.18.28.233 wuai1314.
HOST_IP01=$1
HOST_IP02=$2
HOST_IP03=$3
PASSWORD=$4
cat > cr_rsa-key.sh <<EOF
#!/bin/bash
rpm -q expect &> /dev/null
if [ \$? -ne 0 ];then
yum -y install expect
fi
expect <<eof
spawn ssh-keygen -t rsa
expect {
"*id_rsa):" { send "\r";exp_continue }
"*(y/n)?" { send "\r";exp_continue }
"*passphrase):" { send "\r";exp_continue }
"*again:" { send "\r" }
}
expect eof
eof
EOF
cat > key_copy.sh <<EOF
#!/bin/bash
for i in $HOST_IP01 $HOST_IP02 $HOST_IP03
do
if [ "\$(ifconfig eth0 | awk 'NR==2{print $2}')" != "\$i" ];then
expect <<eof
spawn ssh-copy-id root@\$i
expect {
"yes/no" {send "yes\r";exp_continue}
"password:" {send "$PASSWORD\r"}
}
expect eof
eof
fi
done
EOF
chmod +x key_copy.sh
chmod +x cr_rsa-key.sh
bash ./cr_rsa-key.sh
for i in $HOST_IP02 $HOST_IP03
do
expect <<EOF
spawn scp cr_rsa-key.sh key_copy.sh root@$i:/root
expect {
"password" { send "$PASSWORD\r" }
"yes/no" { send "yes\r";exp_continue }
}
expect eof
EOF
expect <<EOF
spawn ssh-copy-id root@$i
expect {
"password" {send "$PASSWORD\r"}
"yes/no" {send "yes\r";exp_continue}
}
expect eof
EOF
expect <<EOF
spawn ssh root@$i
expect {
"password" { send "$PASSWORD\r" }
"yes/no" { send "yes\r";exp_continue }
}
expect "]#" {send "bash /root/cr_rsa-key.sh\r"}
expect "]#" {send "bash /root/key_copy.sh\r"}
expect "]#" {send "exit\r"}
expect eof
EOF
done