CentOS服务器如何配置SSH密钥认证实现免密登录?

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

CentOS服务器如何配置SSH密钥认证实现免密登录?

理解SSH密钥认证的原理

SSH密钥认证的核心是公钥加密技术,每个用户都会拥有一对独一无二的密钥:

  • 私钥:如同个人的身份证或钥匙,必须由用户妥善保管,绝对不能泄露给任何人,私钥通常存储在客户端机器上,并可以设置一个密码进行二次保护。
  • 公钥:如同一个公开的锁孔,可以安全地放置在任何需要验证身份的服务器上。

其认证流程如下:当客户端尝试连接服务器时,服务器会用事先存储的公钥创建一个随机“挑战”信息发送给客户端,客户端收到后,使用自己的私钥对这个“挑战”信息进行签名,并将签名结果发回服务器,服务器再用对应的公钥来验证这个签名,如果验证通过,服务器便确认了客户端的身份,从而允许登录,整个过程无需传输私钥,极为安全。

配置前的准备工作

在开始配置之前,请确保您具备以下条件:

  1. 一台运行CentOS 7或更高版本的服务器,并拥有一个具有sudo权限的用户账户。
  2. 一台客户端计算机,可以是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工具,它会自动处理权限问题并将公钥添加到服务器的正确位置。

CentOS服务器如何配置SSH密钥认证实现免密登录?

在客户端终端中执行以下命令,将your_useryour_server_ip替换为您的实际用户名和服务器IP地址。

ssh-copy-id your_user@your_server_ip

首次执行时,您需要输入服务器用户的密码。ssh-copy-id会自动完成以下工作:

  1. 连接到服务器。
  2. 在服务器用户的家目录下创建.ssh目录(如果不存在)。
  3. .ssh目录和authorized_keys文件的权限设置为安全的值。
  4. 将您的公钥内容追加到~/.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服务。

CentOS服务器如何配置SSH密钥认证实现免密登录?

sudo systemctl restart sshd

回到您的客户端,再次尝试SSH登录服务器:

ssh your_user@your_server_ip

如果一切顺利,您将直接登录,而无需输入任何密码(如果您为私钥设置了密码,此时会提示您输入私钥密码),这证明密钥认证已成功配置。

在您通过密钥成功登录多次,确认其稳定可靠后,即可返回sshd_config文件,将PasswordAuthentication设置为no,以彻底杜绝密码攻击。

安全加固建议

  1. 为私钥设置强密码:这是保护您私钥的最后一道防线。
  2. 定期备份私钥:将私钥文件备份到多个安全的地方,如加密的U盘或云存储。
  3. 限制SSH访问的IP:通过防火墙(如firewalldiptables)或/etc/hosts.allow/etc/hosts.deny文件,限制只有特定IP地址才能访问SSH端口(默认22)。
  4. 修改默认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执行操作,这样,您只需管理好一个私钥,就能便捷地访问所有授权的服务器。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-13 10:44
下一篇 2025-10-13 10:55

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信