文章目录
1.三台切换普通用户用户
su 普通用户
2.删除宿主目录下的.ssh文件夹
rm -rf .ssh/
3.三台都创建密钥
ssh-keygen -t rsa
4.master生成认证文件
cd .ssh
cat id_rsa.pub >> authorized_keys
5.将另外两台的公钥发送给master
cd .ssh
scp id_rsa.pub 用户名@master:~/.ssh/1
scp id_rsa.pub 用户名@master:~/.ssh/2
6.将1和2两个文件的内容追加到认真文件里面
cat 1 2 >> authorized_keys
7.将认证文件分发
scp authorized_keys 用户名@slave1:~/.ssh/
scp authorized_keys 用户名@slave2:~/.ssh/
8.修改权限
cd .ssh
chmod 700 authorized_keys
9.测试
ssh 用户名@主机名
记得退出!!!–exit
一键部署脚本
#!/bin/bash
# 设置用户名、密码和远程主机列表
REMOTE_USER="root"
REMOTE_PASS="123456" # ← 请改成实际密码(注意安全)
HOSTS=("192.168.1.101" "192.168.1.102")
# 创建 SSH 密钥对(如不存在)
if [ ! -f ~/.ssh/id_rsa ]; then
echo "未检测到 RSA 密钥,正在创建..."
ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
else
echo "已存在 RSA 密钥,跳过创建。"
fi
# 分发公钥到每台主机
for HOST in "${HOSTS[@]}"; do
echo "正在向 $HOST 分发公钥..."
sshpass -p "$REMOTE_PASS" ssh-copy-id -i ~/.ssh/id_rsa.pub -o StrictHostKeyChecking=no ${REMOTE_USER}@${HOST}
if [ $? -eq 0 ]; then
echo "成功分发到 $HOST"
else
echo "分发失败:$HOST,请检查连接或认证信息"
fi
done
改良版本
#!/bin/bash
# 定义主机列表变量为 HOSTS
HOSTS=("192.168.0.102" "192.168.0.103")
USER="root"
# 安全读取密码,不回显
read -s -p "请输入 $USER 的登录密码: " PASSWORD
echo ""
# 检查本地是否已有密钥,没有就生成
[ -f ~/.ssh/id_rsa.pub ] || ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa
# 储存公钥
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 确保每台服务器都有密钥
for HOST in "${HOSTS[@]}"; do
echo ">>> [$HOST] 生成密钥(如果尚未存在)"
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no $USER@$HOST \
"mkdir -p ~/.ssh && [ -f ~/.ssh/id_rsa.pub ] || ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa"
done
# 拉取所有服务器的公钥到本地
echo ">>> 收集所有服务器公钥到本地"
for HOST in "${HOSTS[@]}"; do
sshpass -p "$PASSWORD" ssh -o StrictHostKeyChecking=no $USER@$HOST \
"cat ~/.ssh/id_rsa.pub" >> ~/.ssh/authorized_keys
done
# 分发合并后的 authorized_keys 到所有服务器
echo ">>> 分发合并后的 authorized_keys 到所有服务器"
for HOST in "${HOSTS[@]}"; do
sshpass -p "$PASSWORD" scp -o StrictHostKeyChecking=no ~/.ssh/authorized_keys $USER@$HOST:~/.ssh/authorized_keys
done
echo "SSH 免密互信已配置完成"