在 CentOS 7.9 上开启 SSH 密钥认证登录,通常分为在客户端生成密钥、将公钥部署到服务器以及配置服务端三个主要步骤。以下是详细的操作指南:

第一步:在客户端生成 SSH 密钥对

在您的**本地电脑(客户端)**上,打开终端并执行以下命令生成 RSA 密钥对:

ssh-keygen -t rsa

执行后一路按回车即可(默认保存在 ~/.ssh/ 目录下)。生成后会得到两个文件:

  • id_rsa:私钥(需妥善保管,切勿泄露)
  • id_rsa.pub:公钥

第二步:将公钥部署到 CentOS 服务器

将生成的公钥内容写入到服务器目标用户的 ~/.ssh/authorized_keys 文件中。

方法一:使用 ssh-copy-id 命令(推荐)

ssh-copy-id user@your_server_ip

输入一次服务器密码后,公钥会自动追加到服务器的 authorized_keys 文件中。

方法二:手动配置
如果无法使用上述命令,可手动登录服务器执行以下操作:

  1. 创建 .ssh 目录并设置权限:
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    
  2. 将公钥内容写入 authorized_keys 文件:
    echo "你的公钥内容" >> ~/.ssh/authorized_keys
    
  3. 设置 authorized_keys 文件的严格权限:
    chmod 600 ~/.ssh/authorized_keys
    

第三步:配置服务器 SSH 服务

登录到 CentOS 7.9 服务器,编辑 SSH 配置文件:

vim /etc/ssh/sshd_config

找到并修改(或添加)以下关键配置项:

PubkeyAuthentication yes      # 开启公钥认证
AuthorizedKeysFile .ssh/authorized_keys  # 指定公钥文件路径
PermitRootLogin yes           # 若需使用 root 登录,需设置为 yes(生产环境建议用普通用户)
PasswordAuthentication yes    # 测试阶段建议保留为 yes,确认密钥登录成功后再改为 no 禁用密码

第四步:重启 SSH 服务并测试

保存配置文件后,重启 SSH 服务使配置生效:

systemctl restart sshd

在客户端使用私钥测试登录:

ssh -i ~/.ssh/id_rsa user@your_server_ip

如果配置正确,此时应无需输入密码即可直接登录。

⚠️ 常见问题排查与加固建议

  1. 权限问题:如果仍提示需要密码,请重点检查服务器端权限。用户主目录权限应为 755,.ssh 目录必须为 700,authorized_keys 文件必须为 600。
  2. SELinux 拦截:如果服务器开启了 SELinux,可能会拦截 SSH 读取密钥。可执行 restorecon -Rv ~/.ssh 恢复正确的安全上下文。
  3. 安全加固:在确认密钥登录完全正常后,强烈建议将 PasswordAuthentication 修改为 no,彻底关闭密码登录,以防止暴力破解攻击。同时,生产环境中建议禁止 root 用户直接登录(设置 PermitRootLogin no),改用普通用户登录后通过 sudo 提权。