在Linux服务器管理领域,安全始终是第一要务,传统的密码认证方式虽然简单,但容易受到暴力破解、字典攻击等威胁,为了构建更安全、更便捷的登录环境,SSH密钥认证应运而生,它基于非对称加密技术,通过一对密钥(公钥和私钥)来实现身份验证,不仅大幅提升了安全性,还实现了免密码登录的便利性,本文将以CentOS系统为例,详细讲解如何配置SSH密钥认证,并提供相关的安全加固建议。

理解SSH密钥认证的原理
SSH密钥认证的核心是公钥加密技术,每个用户都会拥有一对独一无二的密钥:
- 私钥:如同个人的身份证或钥匙,必须由用户妥善保管,绝对不能泄露给任何人,私钥通常存储在客户端机器上,并可以设置一个密码进行二次保护。
- 公钥:如同一个公开的锁孔,可以安全地放置在任何需要验证身份的服务器上。
其认证流程如下:当客户端尝试连接服务器时,服务器会用事先存储的公钥创建一个随机“挑战”信息发送给客户端,客户端收到后,使用自己的私钥对这个“挑战”信息进行签名,并将签名结果发回服务器,服务器再用对应的公钥来验证这个签名,如果验证通过,服务器便确认了客户端的身份,从而允许登录,整个过程无需传输私钥,极为安全。
配置前的准备工作
在开始配置之前,请确保您具备以下条件:
- 一台运行CentOS 7或更高版本的服务器,并拥有一个具有
sudo权限的用户账户。 - 一台客户端计算机,可以是Linux、macOS或Windows系统,我们将在这台机器上生成密钥对。
详细配置步骤
整个配置过程分为四个主要步骤:生成密钥对、上传公钥至服务器、配置SSH服务以及最终测试。
第一步:在客户端生成密钥对
打开客户端的终端(在Windows上可以使用PowerShell、CMD或Git Bash),执行以下命令来生成密钥对,推荐使用ed25519算法,它比传统的RSA更安全、性能更好。
ssh-keygen -t ed25519 -C "your_email@example.com"
命令参数解释:
-t ed25519: 指定密钥类型为ed25519。-C "your_email@example.com": 添加一个注释,通常是您的邮箱,用于标识该密钥的用途。
执行后,系统会提示您选择密钥文件的保存位置,默认为~/.ssh/id_ed25519,直接按回车键即可,系统会要求您为私钥设置一个密码,这是一个非常重要的安全步骤,即使私钥文件被盗,攻击者没有这个密码也无法使用它,为了最高安全性,建议设置一个强密码。
生成完成后,您会在~/.ssh/目录下看到两个新文件:
id_ed25519: 您的私钥。id_ed25519.pub: 您的公钥。
第二步:将公钥上传到CentOS服务器
最简单、最推荐的方法是使用ssh-copy-id工具,它会自动处理权限问题并将公钥添加到服务器的正确位置。

在客户端终端中执行以下命令,将your_user和your_server_ip替换为您的实际用户名和服务器IP地址。
ssh-copy-id your_user@your_server_ip
首次执行时,您需要输入服务器用户的密码。ssh-copy-id会自动完成以下工作:
- 连接到服务器。
- 在服务器用户的家目录下创建
.ssh目录(如果不存在)。 - 将
.ssh目录和authorized_keys文件的权限设置为安全的值。 - 将您的公钥内容追加到
~/.ssh/authorized_keys文件中。
如果您的客户端没有ssh-copy-id(例如某些Windows环境),您也可以手动复制公钥内容,在客户端显示公钥内容:
cat ~/.ssh/id_ed25519.pub
复制全部输出,然后手动登录到服务器,执行以下命令:
mkdir -p ~/.ssh echo "粘贴您的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
第三步:配置SSH服务
为了让服务器更安全地使用密钥认证,我们需要调整SSH的配置文件。
使用具有sudo权限的用户登录到CentOS服务器,编辑SSH配置文件:
sudo vi /etc/ssh/sshd_config
找到并确认或修改以下配置项:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
PubkeyAuthentication |
yes |
启用公钥认证,通常是默认值,但最好确认一下。 |
AuthorizedKeysFile |
.ssh/authorized_keys |
指定公钥文件的路径,通常是默认值。 |
PasswordAuthentication |
no |
(关键步骤) 禁用密码认证。请务必在确认密钥登录正常工作后再修改此项! |
PermitRootLogin |
no |
禁止root用户直接通过SSH登录,增强安全性。 |
修改完成后,保存并退出编辑器。
第四步:重启SSH服务并测试
应用配置更改,需要重启SSH服务。

sudo systemctl restart sshd
回到您的客户端,再次尝试SSH登录服务器:
ssh your_user@your_server_ip
如果一切顺利,您将直接登录,而无需输入任何密码(如果您为私钥设置了密码,此时会提示您输入私钥密码),这证明密钥认证已成功配置。
在您通过密钥成功登录多次,确认其稳定可靠后,即可返回sshd_config文件,将PasswordAuthentication设置为no,以彻底杜绝密码攻击。
安全加固建议
- 为私钥设置强密码:这是保护您私钥的最后一道防线。
- 定期备份私钥:将私钥文件备份到多个安全的地方,如加密的U盘或云存储。
- 限制SSH访问的IP:通过防火墙(如
firewalld或iptables)或/etc/hosts.allow和/etc/hosts.deny文件,限制只有特定IP地址才能访问SSH端口(默认22)。 - 修改默认SSH端口:将SSH服务端口从默认的22改为一个不常用的高位端口,可以有效减少自动化扫描攻击。
相关问答FAQs
问题1:如果我禁用了密码认证,但又不小心丢失了私钥文件怎么办?
解答: 这是一个非常棘手但可能发生的情况,因为您将无法通过SSH登录服务器,解决方案取决于您对服务器的物理或控制台访问权限:
- 物理服务器或云主机: 如果您可以直接接触服务器的物理控制台,或者云服务商提供了Web VNC/控制台访问,您可以通过控制台登录,使用root或具有sudo权限的用户重新启用密码认证(即修改
sshd_config中的PasswordAuthentication yes),然后重启SSH服务,之后就可以用密码重新登录,并重新配置密钥认证。 - 无控制台访问权限: 如果您没有任何形式的控制台访问权限,那么情况将非常糟糕,您可能需要联系服务器提供商寻求技术支持,他们可能能帮您挂载磁盘或通过其他方式恢复访问,在禁用密码认证前,务必备份好私钥。
问题2:我是否可以使用同一对密钥来登录多台不同的服务器?
解答: 是的,完全可以,这是SSH密钥认证的一大优势,您只需将您的同一个公钥(id_ed25519.pub)分别添加到所有您想登录的服务器上对应用户的~/.ssh/authorized_keys文件中即可,使用ssh-copy-id命令分别对服务器A、服务器B、服务器C执行操作,这样,您只需管理好一个私钥,就能便捷地访问所有授权的服务器。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!