#!/usr/bin/env bash
# 写个用于自动生成密钥对的函数
rpm -qa |grep expect && echo "expect yi anzhuang" ||yum -y install expect
auto_keygen(){
/usr/bin/expect<<EOF
set timeout 30
spawn ssh-keygen
expect {
".ssh/id_rsa)" { send "\n"; exp_continue }
"Overwrite (y/n)?" { send "y\n"; exp_continue }
"no passphrase):" { send "\n"; exp_continue }
"again:" { send "\n"; exp_continue }
}
expect eof
EOF
}
# 写个自动免密登录的函数
send_key(){
#pw=123
/usr/bin/expect <<EOF
spawn ssh-copy-id $1@$2
expect {
"(yes/no?)" { send "yes\n"; exp_continue }
"password:" { send "$3\n"; exp_continue }
}
expect eof
EOF
}
#创建一个文件,并把需要登陆的信息输入(user ip passwd)
# 定义一个变量,其值是当前用户的公钥文件
pub_key_file=$HOME/.ssh/id_rsa.pub
# 假如公钥文件不存在,说明需要创建密钥对
if [ ! -f ${pub_key_file} ];then
auto_keygen
fi
cat >ips.txt <<EOF
root 192.168.122.161 1
EOF
# 循环一个存放 user ip passwd 的文件,并且把每个传递给 函数
while read line
do
a=$(echo $line |awk '{print $1}')
b=$(echo $line |awk '{print $2}')
c=$(echo $line |awk '{print $3}')
send_key $a $b $c
done <ips.txt