在Linux服务器管理中,SSH(Secure Shell)是远程连接的核心工具,传统的密码登录方式虽然简单,但易受暴力破解、字典攻击等安全威胁,相比之下,基于证书(公钥/私钥)的SSH登录方式通过非对称加密技术,极大提升了连接安全性,同时避免了重复输入密码的繁琐操作,本文将以RHEL7系统为例,详细介绍如何配置SSH服务器以支持证书登录,涵盖服务端配置、客户端密钥生成及连接测试全流程。
证书登录的优势
与密码登录相比,SSH证书登录具有以下显著优势:
- 安全性更高:私钥由客户端本地保存,公钥传输至服务器,无需在网络中传输密码,避免密码泄露风险。
- 防暴力破解:私钥需配合密码(可选)使用,且长度复杂,暴力破解难度极大。
- 管理便捷:可集中管理服务器端的公钥,方便添加或撤销用户访问权限。
- 自动化支持:适合脚本自动化运维,无需人工干预输入密码。
环境准备
- 服务端:RHEL7系统(已安装SSH服务,默认安装
openssh-server)。 - 客户端:任意支持SSH的工具(如Linux/macOS终端、Windows的PuTTY/Xshell等),本文以Linux客户端为例。
- 用户权限:服务端和客户端需有对应操作的用户权限(如普通用户
root或admin)。
服务端配置
确认SSH服务状态
RHEL7默认已安装SSH服务,可通过以下命令检查状态:

systemctl status sshd
若未运行,执行以下命令启动并设置开机自启:
systemctl start sshd systemctl enable sshd
修改SSH配置文件
编辑SSH服务主配置文件/etc/ssh/sshd_config,启用证书登录相关选项:
vim /etc/ssh/sshd_config
找到以下配置项,确保其值如下(若被注释需取消注释):
# 启用公钥认证 PubkeyAuthentication yes # 公钥存储文件路径(默认为用户家目录下的.ssh/authorized_keys) AuthorizedKeysFile .ssh/authorized_keys # 禁用密码登录(可选,建议测试成功后再禁用,避免无法登录) PasswordAuthentication no
说明:
PasswordAuthentication no表示禁止密码登录,仅允许证书登录,若暂时需要保留密码登录,可设置为yes,测试完成后再禁用。- 配置文件修改后,需重启SSH服务使配置生效:
systemctl restart sshd。
创建用户目录及SSH目录(若不存在)
为确保用户可存放公钥,需检查并创建.ssh目录,并设置正确权限:
# 以用户"admin"为例(替换为实际用户名) mkdir -p /home/admin/.ssh chmod 700 /home/admin/.ssh chown admin:admin /home/admin/.ssh
客户端配置
生成客户端密钥对
在客户端终端执行ssh-keygen命令生成RSA密钥对(推荐使用4096位加密,也可选择ECDSA等算法):
ssh-keygen -t rsa -b 4096 -C "admin@example.com"
命令执行后,会提示以下操作:
- Enter file in which to save the key:输入私钥保存路径(默认为
~/.ssh/id_rsa,直接回车使用默认路径)。 - Enter passphrase:设置私钥密码(可选,建议设置,增强私钥安全性;若不设置,直接回车)。
- Enter same passphrase again:重复输入私钥密码。
成功后,客户端会生成两个文件:
- 私钥:
~/.ssh/id_rsa(需严格保密,切勿泄露) - 公钥:
~/.ssh/id_rsa.pub(需上传至服务器)
将客户端公钥上传至服务器
将客户端的公钥内容追加到服务端用户的authorized_keys文件中,可通过以下两种方式实现:
使用ssh-copy-id命令(推荐)
客户端执行以下命令(替换user为服务端用户名,server_ip为服务端IP):
ssh-copy-id -i ~/.ssh/id_rsa.pub user@server_ip
命令会要求输入服务端用户密码(用于临时授权),执行成功后,公钥会自动追加到服务端~/.ssh/authorized_keys文件中,并设置权限为600。
手动上传公钥内容
若ssh-copy-id不可用,可手动复制公钥内容:
- 客户端查看公钥内容:
cat ~/.ssh/id_rsa.pub
- 登录服务端(临时使用密码登录),将公钥内容追加到
authorized_keys文件:echo "客户端公钥完整内容" >> ~/.ssh/authorized_keys
- 设置
authorized_keys文件权限:chmod 600 ~/.ssh/authorized_keys
验证服务端公钥权限
确保服务端authorized_keys文件及其父目录.ssh权限正确:
# .ssh目录权限必须为700 ls -ld ~/.ssh # 应显示:drwx------ # authorized_keys文件权限必须为600 ls -la ~/.ssh/authorized_keys # 应显示:-rw-------
权限错误会导致SSH拒绝证书登录。
测试证书登录
客户端尝试证书登录
在客户端终端执行以下命令(替换user、server_ip及私钥路径(若非默认路径)):
ssh -i ~/.ssh/id_rsa user@server_ip
- 若设置了私钥密码,首次连接时会提示输入私钥密码。
- 若未设置私钥密码且服务端配置正确,可直接登录服务器。
检查登录日志
若登录失败,可查看服务端SSH日志排查问题(日志路径/var/log/secure):

