RHEL7系统下使用SSH证书登录服务器的配置指南

admin

在Linux服务器管理中,SSH(Secure Shell)是远程连接的核心工具,传统的密码登录方式虽然简单,但易受暴力破解、字典攻击等安全威胁,相比之下,基于证书(公钥/私钥)的SSH登录方式通过非对称加密技术,极大提升了连接安全性,同时避免了重复输入密码的繁琐操作,本文将以RHEL7系统为例,详细介绍如何配置SSH服务器以支持证书登录,涵盖服务端配置、客户端密钥生成及连接测试全流程。

证书登录的优势

与密码登录相比,SSH证书登录具有以下显著优势:

  1. 安全性更高:私钥由客户端本地保存,公钥传输至服务器,无需在网络中传输密码,避免密码泄露风险。
  2. 防暴力破解:私钥需配合密码(可选)使用,且长度复杂,暴力破解难度极大。
  3. 管理便捷:可集中管理服务器端的公钥,方便添加或撤销用户访问权限。
  4. 自动化支持:适合脚本自动化运维,无需人工干预输入密码。

环境准备

  • 服务端:RHEL7系统(已安装SSH服务,默认安装openssh-server)。
  • 客户端:任意支持SSH的工具(如Linux/macOS终端、Windows的PuTTY/Xshell等),本文以Linux客户端为例。
  • 用户权限:服务端和客户端需有对应操作的用户权限(如普通用户rootadmin)。

服务端配置

确认SSH服务状态

RHEL7默认已安装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不可用,可手动复制公钥内容:

  1. 客户端查看公钥内容:
    cat ~/.ssh/id_rsa.pub
  2. 登录服务端(临时使用密码登录),将公钥内容追加到authorized_keys文件:
    echo "客户端公钥完整内容" >> ~/.ssh/authorized_keys
  3. 设置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拒绝证书登录。

测试证书登录

客户端尝试证书登录

在客户端终端执行以下命令(替换userserver_ip及私钥路径(若非默认路径)):

ssh -i ~/.ssh/id_rsa user@server_ip
  • 若设置了私钥密码,首次连接时会提示输入私钥密码。
  • 若未设置私钥密码且服务端配置正确,可直接登录服务器。

检查登录日志

若登录失败,可查看服务端SSH日志排查问题(日志路径/var/log/secure):

		
文章版权声明:除非注明,否则均为xmsdn原创文章,转载或复制请以超链接形式并注明出处。

取消
微信二维码
微信二维码
支付宝二维码