免交互生成秘钥
ssh-keygen -P '' -f ~/.ssh/id_rsa >/dev/null 2>&1
脚本依赖
sshpass 安装
脚本执行前提
- 知道所有节点 root 信息
- 知道所有节点 ssh 端口
- 编写节点信息文件
- 执行脚本
脚本内容
节点信息文件
[root@dsj-dev2 newAutoSSH]
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"
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
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 解决。
参考