云计算百科
云计算领域专业知识百科平台

【Linux知识】服务器间互信配置

服务器间互信配置

      • **一、SSH互信配置步骤(以A免密登录B为例)**
        • **1. 在客户端(A)生成密钥对**
        • **2. 将公钥上传到服务端(B)**
        • **3. 验证免密登录**
        • **4. 批量配置(适用于集群)**
      • **二、底层实现原理**
        • **1. 非对称加密体系**
        • **2. SSH认证流程**
        • **3. 关键文件权限**
      • **三、安全增强措施**
        • **1. 限制SSH访问**
        • **2. 使用证书颁发机构(CA)**
        • **3. 端口敲门(Port Knocking)**
      • **四、常见问题排查**
        • **1. 连接失败:权限过宽**
        • **2. 认证被拒绝**
        • **3. 算法不兼容**
      • **五、扩展应用场景**
        • **1. 通过SSH执行远程命令**
        • **2. 端口转发**
        • **3. 结合Ansible自动化**
      • **总结**

服务器间互信配置(通常指SSH免密登录)是分布式系统、集群管理和自动化运维的基础。以下是详细配置步骤和底层实现原理分析:

一、SSH互信配置步骤(以A免密登录B为例)

1. 在客户端(A)生成密钥对

ssh-keygen -t rsa -b 4096 -C "A@host" # -t指定算法,-b指定长度

生成的文件默认存储在: • 私钥:~/.ssh/id_rsa(权限必须为600) • 公钥:~/.ssh/id_rsa.pub

2. 将公钥上传到服务端(B)

ssh-copy-id -i ~/.ssh/id_rsa.pub user@B_IP

或手动追加公钥到B的授权文件:

cat ~/.ssh/id_rsa.pub | ssh user@B_IP "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

3. 验证免密登录

ssh user@B_IP # 无需输入密码直接登录

4. 批量配置(适用于集群)

使用循环为多台服务器配置互信:

for node in node1 node2 node3; do
ssh-copy-id user@$node
done

二、底层实现原理

1. 非对称加密体系

• 密钥对作用: • 私钥(Private Key):客户端持有,永远不传输,用于解密或签名。 • 公钥(Public Key):上传到服务端,用于加密或验证签名。

2. SSH认证流程
  • TCP三次握手建立连接后,服务端发送自己的公钥指纹(首次连接时需用户确认)。
  • 客户端用服务端公钥加密一个随机生成的会话密钥(Session Key)。
  • 服务端用私钥解密获取会话密钥,后续通信使用该对称密钥加密(提高性能)。
  • 身份验证阶段: • 客户端发送登录用户名。 • 服务端检查authorized_keys文件,用匹配的公钥加密一个随机挑战(Challenge)。 • 客户端用私钥解密挑战并返回结果,服务端验证通过后允许登录。
  • 3. 关键文件权限
    文件路径推荐权限作用
    ~/.ssh/ 700 确保目录仅属主可访问
    ~/.ssh/id_rsa 600 保护私钥不被泄露
    ~/.ssh/authorized_keys 600 防止他人篡改授权密钥

    三、安全增强措施

    1. 限制SSH访问

    在服务端(B)的/etc/ssh/sshd_config中配置:

    PermitRootLogin no # 禁止root登录
    PasswordAuthentication no # 禁用密码认证
    AllowUsers user1 user2 # 只允许特定用户

    2. 使用证书颁发机构(CA)

    适用于大规模集群:

  • 创建CA密钥对:ssh-keygen -t rsa -b 4096 -f ~/.ssh/ca_key
  • 在服务端配置信任CA:# /etc/ssh/sshd_config
    TrustedUserCAKeys /etc/ssh/ca_key.pub
  • 3. 端口敲门(Port Knocking)

    隐藏SSH端口:

    # 示例:依次访问端口1000,2000,3000才会开放22端口
    knockd -d -i eth0 -c /etc/knockd.conf

    四、常见问题排查

    1. 连接失败:权限过宽

    Error: Bad owner or permissions on ~/.ssh/authorized_keys

    解决:

    chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

    2. 认证被拒绝

    Permission denied (publickey)

    检查步骤:

  • 确认服务端sshd服务运行:systemctl status sshd
  • 查看服务端日志:journalctl -u sshd -f
  • 3. 算法不兼容

    no matching key exchange method found

    解决:在客户端~/.ssh/config中指定算法:

    Host *
    KexAlgorithms diffie-hellman-group-exchange-sha256

    五、扩展应用场景

    1. 通过SSH执行远程命令

    ssh user@B_IP "ls -l /tmp" # 单命令
    ssh user@B_IP <<'EOF' # 多命令
    df -h
    free -m
    EOF

    2. 端口转发

    ssh -L 8080:B_IP:80 user@B_IP # 本地端口转发
    ssh -R 3306:localhost:3306 user@B_IP # 远程端口转发

    3. 结合Ansible自动化

    在/etc/ansible/hosts中定义主机组:

    [web]
    node1 ansible_ssh_user=user
    node2 ansible_ssh_user=user

    总结

    • 核心原理:非对称加密 + 挑战响应机制。 • 安全关键:私钥保护、最小权限原则、服务端严格配置。 • 性能优化:会话复用(ControlMaster配置)可减少连接建立开销。

    通过合理配置SSH互信,可实现安全高效的服务器管理,为分布式系统提供基础认证保障。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » 【Linux知识】服务器间互信配置
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!