此脚本用于配置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--------"
文章作者: Administrator
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 知识武装灵魂
linux
喜欢就支持一下吧