在 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 文件中。
方法二:手动配置
如果无法使用上述命令,可手动登录服务器执行以下操作:
- 创建
.ssh目录并设置权限:mkdir -p ~/.ssh chmod 700 ~/.ssh - 将公钥内容写入
authorized_keys文件:echo "你的公钥内容" >> ~/.ssh/authorized_keys - 设置
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
如果配置正确,此时应无需输入密码即可直接登录。
⚠️ 常见问题排查与加固建议
- 权限问题:如果仍提示需要密码,请重点检查服务器端权限。用户主目录权限应为
755,.ssh目录必须为700,authorized_keys文件必须为600。 - SELinux 拦截:如果服务器开启了 SELinux,可能会拦截 SSH 读取密钥。可执行
restorecon -Rv ~/.ssh恢复正确的安全上下文。 - 安全加固:在确认密钥登录完全正常后,强烈建议将
PasswordAuthentication修改为no,彻底关闭密码登录,以防止暴力破解攻击。同时,生产环境中建议禁止 root 用户直接登录(设置PermitRootLogin no),改用普通用户登录后通过sudo提权。