在当今的服务器管理中,确保远程访问的安全性至关重要,CentOS作为一种流行的Linux发行版,广泛用于生产环境,传统的SSH密码登录虽然方便,但容易受到暴力破解攻击,采用私钥登录方式,可以大幅提升安全性,减少潜在风险,本文将详细介绍在CentOS系统上配置SSH私钥登录的步骤,帮助管理员实现更可靠的访问控制。

为什么选择私钥登录?
私钥登录基于非对称加密原理,使用一对密钥:私钥和公钥,私钥保存在客户端,公钥上传到服务器,登录时,服务器通过公钥验证私钥,无需传输密码,这种方式避免了密码泄露的风险,尤其适合多用户环境或自动化脚本,与密码登录相比,私钥登录更难被破解,因为私钥通常较长且复杂,攻击者难以猜测或拦截。
准备工作
在开始配置前,请确保您拥有以下条件:
- 一台运行CentOS的服务器(建议版本7或以上)。
- root或具有sudo权限的用户账户。
- 本地计算机(如Windows、macOS或Linux)已安装SSH客户端。
如果服务器尚未安装SSH服务,可以通过以下命令安装:
sudo yum install openssh-server openssh-clients -y sudo systemctl start sshd sudo systemctl enable sshd
生成SSH密钥对
在本地计算机上生成SSH密钥对,打开终端或命令提示符,执行以下命令:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这里,-t rsa指定密钥类型为RSA,-b 4096设置密钥长度为4096位以提高安全性,-C添加注释(通常用邮箱标识),系统会提示您选择保存路径和设置密码短语,建议使用默认路径(如~/.ssh/id_rsa),并为私钥设置一个强密码短语,以增加额外保护。
生成完成后,您会在~/.ssh/目录下看到两个文件:id_rsa(私钥)和id_rsa.pub(公钥),私钥必须严格保密,切勿共享;公钥则可以安全地传输到服务器。
上传公钥到服务器
将公钥上传到CentOS服务器,有多种方法可以实现,最常用的是使用ssh-copy-id命令,在本地终端中运行:
ssh-copy-id -i ~/.ssh/id_rsa.pub username@server_ip
替换username为您的服务器用户名,server_ip为服务器IP地址,系统会提示输入用户密码,完成后,公钥会自动添加到服务器的~/.ssh/authorized_keys文件中。

如果ssh-copy-id不可用,可以手动操作,将公钥内容复制到剪贴板:
cat ~/.ssh/id_rsa.pub
通过SSH登录服务器:
ssh username@server_ip
在服务器上,创建或编辑~/.ssh/authorized_keys文件:
mkdir -p ~/.ssh chmod 700 ~/.ssh echo "粘贴的公钥内容" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
确保文件权限正确,避免其他用户访问。
配置SSH服务器
需要修改服务器的SSH配置以启用私钥登录,使用文本编辑器打开SSH配置文件:
sudo vi /etc/ssh/sshd_config
找到以下行,并确保设置如下:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 禁用密码登录,建议在测试后启用 PubkeyAuthentication yes允许使用公钥认证。AuthorizedKeysFile指定公钥存储路径。PasswordAuthentication no禁用密码登录,这可以防止暴力攻击,但请先确认私钥登录正常。
检查其他相关设置:
PermitRootLogin without-password # 仅允许root用户使用密钥登录
ChallengeResponseAuthentication no # 禁用其他认证方式
UsePAM no # 如果不需要PAM,可以禁用 保存文件后,重启SSH服务使更改生效:

sudo systemctl restart sshd
测试私钥登录
在禁用密码登录前,务必测试私钥登录是否正常工作,从本地计算机尝试连接:
ssh -i ~/.ssh/id_rsa username@server_ip
如果系统提示输入私钥密码短语(如果设置了),并成功登录,说明配置正确,如果失败,检查以下常见问题:
- 公钥是否正确添加到
authorized_keys文件? - 文件权限是否正确(
.ssh目录应为700,authorized_keys为600)? - 服务器防火墙是否允许SSH连接(默认端口22)?
测试成功后,可以重新编辑/etc/ssh/sshd_config,将PasswordAuthentication设置为no,并再次重启SSH服务。
管理多个密钥或用户
如果您管理多台服务器或多个用户,可以扩展此配置,为不同服务器使用不同密钥对,或在authorized_keys文件中添加多个公钥,考虑使用SSH代理(如ssh-agent)来管理私钥密码短语,避免每次登录都输入。
对于团队环境,建议集中管理公钥,例如通过版本控制工具或配置管理系统,确保密钥更新及时且安全。
安全最佳实践
私钥登录虽安全,但仍需注意以下几点:
- 定期轮换密钥:每隔几个月生成新密钥对,替换旧公钥。
- 备份私钥:将私钥存储在加密的离线介质中,防止丢失。
- 监控登录日志:使用
journalctl -u sshd或/var/log/secure检查异常访问。 - 结合其他安全措施:如启用防火墙、使用Fail2ban阻止暴力尝试,或配置双因素认证。
从我的经验来看,私钥登录不仅是技术升级,更是管理思维的转变,它迫使管理员更注重密钥保管和权限控制,从而养成良好安全习惯,在云时代,忽视这一点可能导致严重数据泄露,我强烈建议将私钥登录作为服务器部署的标准流程,并结合自动化工具来简化维护,如果您在操作中遇到问题,多查阅官方文档或社区讨论,往往能找到可靠解决方案,安全是一个持续过程,从小步骤开始,就能积累显著成效。

