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

注意替换userserverB_IPserverC_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地址。
  • 在生产环境中部署之前,请务必在测试环境中验证脚本的正确性和安全性。