Linux 下节点互信

免交互生成秘钥

ssh-keygen -P '' -f ~/.ssh/id_rsa >/dev/null 2>&1

脚本依赖

sshpass 安装

脚本执行前提

  • 知道所有节点 root 信息
  • 知道所有节点 ssh 端口
  • 编写节点信息文件
  • 执行脚本

脚本内容

节点信息文件
[root@dsj-dev2 newAutoSSH]# cat allHostInfo.txt 
10.10.200.84,dc01,root,123456,22,old
10.10.200.28,dc02,root,123456,22,new
10.10.200.33,dc03,root,123456,22,new

# 说明
    - 第一列:机器 IP
    - 第二列:机器主机名
    - 第三列:机器 root 账号
    - 第四列:机器 root 密码
    - 第五列:机器远程端口
    - 第六列:新旧机器标识 -- (old:老机器、new:新机器)
脚本内容
# 节点信息文件位置及名称
allHostInfoFile="allHostInfo.txt"

# install sshpass
if [[ ! -f sshpass-1.06-2.el7.x86_64.rpm ]]; then
        echo "[Error] -- No sshpass Package, Will Exit Install"
        exit
else
        rpm -ivh install ./sshpass-1.06-2.el7.x86_64.rpm >/dev/null 2>&1
        echo "StrictHostKeyChecking no" > /root/.ssh/config && echo "StrictHostKeyChecking no" > /home/dev/.ssh/config
fi

# auth ssh config

while IFS=',' read ip hostname rootname rootpass remoteport hostinfo
do

        if [[ "${hostinfo}" == "new" ]]; then
                echo "set hostname on $ip -- [root]"
                sshpass -p "${rootpass}" ssh -q -p ${remoteport} ${rootname}@${ip} -o StrictHostKeyChecking=no -n "hostnamectl --static set-hostname ${hostname}"
                echo "get public key on $ip -- [root]"
                sshpass -p "${rootpass}" ssh -q -p ${remoteport} ${rootname}@${ip} -o StrictHostKeyChecking=no -n "rm -rf /root/.ssh && ssh-keygen -P '' -f /root/.ssh/id_rsa >/dev/null 2>&1 && cat /root/.ssh/id_rsa.pub" >> /root/.ssh/authorized_keys
        fi

done < ${allHostInfoFile}

while IFS=',' read ip hostname rootname rootpass remoteport hostinfo
do
        echo "scp auth file to $ip -- [root]"
        sshpass -p "${rootpass}" scp -q -P ${remoteport} /root/.ssh/authorized_keys ${rootname}@${ip}:/root/.ssh/

done < ${allHostInfoFile}
执行脚本
sh autoSSH.sh

Shell 中 While 存在问题

while 中执行 ssh 到其他节点会出现中断现象,在 ssh 中增加参数 -n 解决。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值