SSH免密登录脚本
此脚本用于配置SSH免密登录。
通过cut获取/etc/hosts中配置的映射主机名生成列表
通过expect实现秘钥的自动生成与发送,在执行脚本前先安装expect组件: yum install -y expect
#!/bin/bash
set -e
# 所需变量
# 取得集群的所有主机名,这里需要注意:/etc/hosts配置的IP和主机名只能用一个空格分割
# tail -n +2 表示从第2行开始
# cut -d ' ' -f 2 表示用空格分割每一行并获取第2列
hostList=$(cat /etc/hosts | tail -n +2 | cut -d ' ' -f 2)
pingCount=5
logPre=TDP
#服务器密码
passwd=
set timeout 60
#秘钥生成函数
ssh-keygen(){
echo "======>$host ssh-keygen... \n"
/usr/bin/expect <<EOF
spawn ssh-keygen
expect {
"Enter file in which to save the*" { send "\r"; exp_continue}
"Overwrite*" { send "n\r" ; exp_continue}
"Enter passphrase*" { send "\r"; exp_continue}
"Enter same passphrase again:" { send "\r" ; exp_continue}
}
EOF
}
#拷贝公钥函数
ssh-copy-id(){
echo "======>$host ssh-copy-id... \n"
/usr/bin/expect <<EOF
spawn ssh-copy-id $host
expect {
"*yes/no*" {send "yes\r" ; exp_continue}
"*password*" {send "$passwd\r" ; exp_continue}
}
EOF
}
# 调用函数,生成秘钥
ssh-keygen
for host in $hostList
do
echo "----------------$host-----------------"
#检测主机的连通性
unPing=$(ping $host -c $pingCount | grep 'Unreachable' | wc -l)
if [ "$unPing" == "$pingCount" ]; then
echo -e "$logPre======>$host is Unreachable,please check '/etc/hosts' file"
continue
fi
echo "$logPre======>$host "
ssh-copy-id $host
echo "$logPre======>$host is done! "
done
wait
echo "------hosts done--------"
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
知识武装灵魂!
喜欢就支持一下吧