1.问题背景
私有化交付场景,经常需要配置跳板机到其他机器列表的免密登录; 比如 sealos安装一个Kubernetes集群、或者跳板机scp传包到其他机器,配置免密登录可以加速后续部署效率。
2.方案
可以使用如下脚本完成批量机器免密登录设置
vi copy_ssh_key.sh
#!/bin/bash
# 检查参数数量
if [ "$#" -lt 3 ]; then
echo "Usage: $0 'host1ip host2ip host3ip' your_username your_password"
exit 1
fi
# 从参数中获取目标机器、用户名和密码
TARGET_HOSTS=($1) # 第一个参数转换为数组
USER=$2 # 第二个参数为用户名
PASSWORD=$3 # 第三个参数为密码
# 生成 SSH 密钥对(如果尚未生成)
if [ ! -f ~/.ssh/id_rsa ]; then
echo "Generating SSH key pair..."
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -N ""
else
echo "SSH key pair already exists."
fi
# 将公钥复制到目标机器
for HOST in "${TARGET_HOSTS[@]}"; do
echo "Copying SSH key to $HOST..."
sshpass -p "$PASSWORD" ssh-copy-id -i ~/.ssh/id_rsa.pub "$USER@$HOST"
done
echo "All done!"
脚本使用说明: 此脚本为批量设置跳板机到其他机器免密登录脚本
1.赋予脚本执行权限
chmod +x copy_ssh_key.sh
2.运行脚本,传入主机ip列表、用户名和密码。请注意,目标主机ip列表应包含在单引号内,以空格分隔
bash copy_ssh_key.sh 'host1 host2 host3' username password
bash copy_ssh_key.sh '192.168.0.1 192.168.0.2 192.168.0.3' root 123456
3.前置条件
确保你机器上有 sshpass 工具。如果未安装,可以通过以下命令安装:
#Ubuntu
sudo apt-get install sshpass
#CentOS
sudo yum install sshpass