Ubuntu 服务器之间做互信
Ubuntu服务器之间的互信通常是通过SSH公钥认证的方式来实现的,这种方式允许服务器之间在无需输入密码的情况下进行通信。以下是Ubuntu服务器A、B、C之间建立互信的基本步骤,以及一个简单的脚本示例,用于自动化这个过程。
基本步骤
生成SSH密钥对
在每个服务器上(A、B、C),使用ssh-keygen命令生成一对SSH密钥对(公钥和私钥)。通常,私钥存储在~/.ssh/id_rsa,公钥存储在~/.ssh/id_rsa.pub。
ssh-keygen -t rsa
按提示操作,通常直接按回车即可。
分发公钥
接下来,你需要将每个服务器的公钥分发到其他所有服务器。这可以通过手动复制或使用ssh-copy-id命令自动完成。
- 从服务器A分发公钥到B和C:
ssh-copy-id user@serverB_IP
ssh-copy-id user@serverC_IP
- 从服务器B分发公钥到A和C(如果还未分发):
ssh-copy-id user@serverA_IP
ssh-copy-id user@serverC_IP
- 从服务器C分发公钥到A和B(如果还未分发):
ssh-copy-id user@serverA_IP
ssh-copy-id user@serverB_IP
注意替换user、serverB_IP、serverC_IP为实际的用户名和IP地址。
验证互信
完成公钥分发后,你可以尝试从任意一台服务器SSH连接到其他服务器,验证是否无需输入密码即可成功连接。
互信脚本示例
由于脚本需要处理密码输入,而自动化脚本通常不直接处理密码(出于安全考虑),这里给出一个简化的示例,假设已经通过某种方式(如密钥认证或使用sudo权限)允许无密码执行。
#!/bin/bash
# 用户名和服务器IP列表
declare -A SERVERS
SERVERS["A"]="userA@serverA_IP"
SERVERS["B"]="userB@serverB_IP"
SERVERS["C"]="userC@serverC_IP"
# 生成SSH密钥对(如果还未生成)
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
# 分发公钥
for server in "${!SERVERS[@]}"; do
echo "Distributing keys from $server to other servers..."
for other_server in "${!SERVERS[@]}"; do
if [ "$server" != "$other_server" ]; then
SSH_CMD="ssh-copy-id -i ~/.ssh/id_rsa.pub ${SERVERS[$other_server]}"
echo "Running: $SSH_CMD"
# 注意:这里假设有sudo权限或已设置无密码sudo,或已配置密钥认证
sudo bash -c "$SSH_CMD"
fi
done
done
echo "SSH key distribution completed. Please verify the trust by attempting SSH connections."
注意:
- 这个脚本示例假设你有足够的权限来执行
ssh-copy-id命令,或者已经通过某种方式(如密钥认证)允许无密码执行。 - 在实际部署中,直接在脚本中处理密码通常是不安全的。考虑使用更安全的认证方法,如密钥认证或使用sudo权限。
- 脚本中的
SERVERS数组应根据实际情况填写正确的用户名和IP地址。 - 在生产环境中部署之前,请务必在测试环境中验证脚本的正确性和安全性。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果