SSH互信配置是Linux系统管理中常见的需求,尤其在需要频繁进行远程操作或自动化运维的场景中,本文将详细介绍在CentOS系统上配置SSH互信的完整流程,包括前提条件、具体步骤、常见问题及解决方案,帮助读者快速掌握这一技能。

前提条件
在开始配置SSH互信之前,需要确保以下条件已满足:
- 两台CentOS系统已正确安装并运行SSH服务,可通过
systemctl status sshd命令检查SSH服务状态。 - 两台系统之间网络连通,能够通过IP地址或主机名互相访问。
- 配置互信的用户已存在,且具有sudo权限(如需进行系统级操作)。
生成SSH密钥对
SSH互信的核心是非对称加密技术,通过生成公钥和私钥对实现,具体步骤如下:
- 在本地服务器上打开终端,运行
ssh-keygen -t rsa -b 4096命令生成RSA密钥对。-t指定加密类型为RSA,-b指定密钥长度为4096位(更安全)。 - 命令执行后会提示输入密钥保存路径(默认为
~/.ssh/id_rsa)和密码(可选,建议留空以实现免密登录)。 - 完成后,会在
~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)两个文件。
复制公钥到远程服务器
生成公钥后,需要将其复制到目标服务器的~/.ssh/authorized_keys文件中,以下是两种常用方法:

- 使用
ssh-copy-id命令(推荐): 运行ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host,其中username为远程服务器用户名,remote_host为目标服务器IP或域名,输入密码后,公钥会自动追加到authorized_keys文件中。 - 手动复制公钥内容:
使用
cat ~/.ssh/id_rsa.pub查看公钥内容,然后在远程服务器上执行mkdir -p ~/.ssh和echo "公钥内容" >> ~/.ssh/authorized_keys命令,注意确保.ssh目录权限为700,authorized_keys文件权限为600。
验证SSH互信配置
完成公钥复制后,可通过以下步骤验证互信是否生效:
- 在本地服务器运行
ssh username@remote_host,若无需输入密码即可登录,则表示配置成功。 - 若首次登录,系统可能会提示确认主机指纹(输入
yes即可),之后将直接进入远程服务器。
常见问题及解决方法
- 权限错误:
错误信息类似“Permission denied (publickey,gssapi-keyex,gssapi-with-mic)”,通常是由于
.ssh目录或authorized_keys文件权限不正确导致,可通过chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys修复。 - SELinux或防火墙拦截:
若仍无法登录,可能是SELinux或防火墙限制,临时关闭SELinux可通过
setenforce 0命令,永久修改需编辑/etc/selinux/config文件,防火墙规则可通过firewall-cmd --permanent --add-service=ssh和firewall-cmd --reload添加。
高级配置选项
- 限制SSH密钥使用:
可在
authorized_keys文件中添加选项,如from="192.168.1.0/24"限制仅允许特定IP登录,或command="echo 'Restricted access'"强制执行固定命令。 - 使用SSH代理:
若需通过跳板机访问目标服务器,可在
~/.ssh/config中配置代理转发,Host jump_server HostName jump_ip User jump_user Host remote_server HostName remote_ip User remote_user ProxyJump jump_server
安全注意事项
- 私钥保护:
私钥文件
id_rsa应设置严格权限(chmod 600 ~/.ssh/id_rsa),避免泄露。 - 定期更换密钥:
定期重新生成密钥对,并更新
authorized_keys。 - 禁用密码登录:
在
/etc/ssh/sshd_config中设置PasswordAuthentication no,并重启SSH服务(systemctl restart sshd),强制仅允许密钥登录。
相关问答FAQs
Q1: 如果忘记SSH密钥密码,是否可以恢复?
A1: 私钥密码无法直接恢复,但可以重新生成密钥对并更新authorized_keys文件,建议提前备份私钥或使用密码管理工具存储密码。
Q2: 如何在多台服务器间实现双向互信?
A2: 需在每台服务器上生成自己的密钥对,并将各自的公钥复制到其他服务器的authorized_keys文件中,服务器A的公钥需放入服务器B的authorized_keys,反之亦然。
