帮助中心 > 关于网络安全 > 如何在服务器上使用SSH密钥
如何在服务器上使用SSH密钥
时间 : 2025-04-08 14:39:11
编辑 : Jtti

  仅使用密码保护您的Linux 服务器已不再有效(它们容易受到在线和离线破解和字典攻击,而且人们历来在维护安全密码方面做得很糟糕):您必须使用 SSH 密钥来保护它。本教程将教您什么是 SSH 密钥以及如何用基于 SSH 密钥的身份验证替换默认的 Linux 密码身份验证。
  请注意,我在本教程中使用了jtti VPS,但本指南适用于任何其他提供商的任何虚拟服务器。此外,我还提供了分步视频指南和书面教程。
  什么是 SSH 密钥?
  SSH 密钥是安全 Shell 密钥的缩写。网络安全研究员 Tatu Ylönen于 1995 年创建了 SSH,现在每台 Unix、Linux 和 Mac 电脑都自带了 SSH。它们还适用于每个平台,是所有云基础设施的重要组成部分。
  为什么我应该使用 SSH 密钥而不是密码?
  在您读完这句话之前,“真正的 Holyfield”黑客就可以破解您服务器的密码(PSA:始终使用Bitwarden等密码管理器来确保您的密码安全)。黑客可以使用久经考验的攻击或其他更复杂的方法进入您的服务器。
  现在,我们不是来向您讲授安全卫生或最佳做法的(您可以非常欢迎阅读带有令人翻白眼的“穿连帽衫的黑客”库存照片的恐吓文章)。但是,我们确实想强调的是,SSH 密钥是保护服务器的安全之道,因为它比任何密码都要长得多、复杂得多。与密码不同,SSH 密钥不会发送到服务器。不过,您必须使用密码保护您的 SSH 密钥。
  如何生成 SSH 密钥
  SSH 使用预先生成的公钥和私钥(因此称为 SSH 密钥对)。这些公钥和私钥是通过非对称密钥加密形成的,并会存储起来以备将来使用。作为最佳实践,我们建议为新设备生成新密钥(这样更安全),但这确实需要重新建立信任关系。
  如何验证 SSH 密钥
  公钥保存在你的服务器上,而私钥保存在你的计算机上。如果你尝试登录你的服务器,服务器将生成一个随机字符串并使用公钥对其进行加密。你可以使用私钥解密该字符串(这是解密该字符串的唯一方法)。
  然后,服务器将这个加密字符串发送到您的计算机。您的计算机将使用私钥对其进行解密,并将解密后的字符串发送回服务器。如果计算机上解密的字符串与服务器上的原始字符串匹配,您就可以访问您的服务器。
  如何为 Linux 生成 SSH 密钥
  打开终端并输入以下命令来生成一对密钥(假设您的本地计算机运行 Linux):  

ssh-keygen -t rsa

  注意:您可能需要根据您的 Linux 版本选择文件名和文件保存目标。
  这是保存密钥的默认路径:
  /根/.ssh
  id_rsa 是您的私钥,而 id_rsa.pub 是您的公钥。
  如何为 Windows 生成 SSH 密钥
  如果您的本地计算机运行 Windows,我们建议安装PuTTY,免费的开源 SSH 和终端仿真器(它还包括 PuTTYgen)。
  安装PuTTY后,打开Windows搜索栏并搜索“PuTTYgen”。
  打开之后会出现这个画面:/uploads/images/202504/08/7f4d27b35d149eeea7b9553dff1f46ab.jpg  
  使用 PuTTY 密钥生成器为 Windows 生成 SSH 密钥。
  PuTTY 密钥生成器具有生成 SSH 密钥的所有功能。
  只需单击“生成”并将鼠标移到空白字段上。
  您的密钥将生成:

  /uploads/images/202504/08/dd504636f625ff40e13db1aa72ddd236.jpg  
  Windows 的 PuTTY 密钥生成器可以使用 RSA、DSA、ECDSA、ED25519 和 SSH-1(RSA)算法创建 SSH 密钥。
  看看那个公钥!它是如此公开(并且希望是安全的)。
  如何向现有公钥和私钥添加注释(可选)
  您可以在 SSH 密钥后输入空格并输入注释,从而为其添加注释。如果您查阅BSD 系统管理器手册,就会发现以 # 开头的行被视为注释。
  如何分配密钥密码(可选,但推荐)
  分配密钥密码将通过本地加密(和解密)您的私钥来增强私钥的安全性。每当您连接到服务器时,您都需要输入密钥密码(密钥密码是连接到服务器的另一层安全保障 - 几乎类似于 2FA)。
  如何将 SSH 公钥上传到你的服务器
  创建密钥对后,您需要将公钥上传到您的服务器。您可以通过 FTP 或服务器控制台上传公钥。
  通过 FTP 上传公钥
  如果您想使用 FTP 上传公钥,请启动 FTP 程序并以 root 身份连接到服务器。在根目录中创建以下目录:
  .ssh
  现在在此文件夹中创建 authorized_keys 文本文件并将整个公钥粘贴到其中。现在保存文件。
  通过控制台上传公钥
  通过 SSH 以 root 身份登录。使用此命令,您可以创建正确的目录并同时切换到该目录: 

mkdir /root/.ssh && cd /root/.ssh

  现在使用以下命令创建并打开authorized_keys文本文件:  

nano authorized_keys

  粘贴您的整个公钥并按 [CTRL+O] 保存文件。要退出编辑器,请使用 [CTRL+X]
  如何在PuTTY中使用SSH私钥:
  创建由私钥和公钥组成的密钥对并将公钥上传到服务器后,您需要将私钥插入 PuTTY。
  为此,请打开 PuTTY。
  在左侧的“类别”下,您会看到“窗口”和“连接”等类别列表。请按照以下四个步骤选择您的私钥:
  1:点击“连接”展开。
  2:点击“SSH”旁边的“[+]”。
  3:点击“Auth”在右侧打开一个窗口
  4:点击“浏览”选择你的私钥

 /uploads/images/202504/08/090ea8c5bb6f8c1a813661ddaa776dbc.jpg  
  按照这四个步骤通过 PuTTY 密钥生成器选择您的私钥。
  您可以通过四个步骤通过 PuTTY 密钥生成器选择您的私钥。
  现在向上滚动左侧列表并单击“Session”。
  输入您的服务器的 IP 地址并在“已保存的会话”字段中选择一个配置文件名称。
  单击“保存”按钮保存您的个人资料。

 /uploads/images/202504/08/047f9d9d159b12165b1dc4636fbca2b0.jpg  
  PuTTY 设置 2
  现在您已经使用私钥在 PuTTY 中创建了一个配置文件。
  如何在 Pageant 中使用您的 SSH 私钥:
  除了将您的私钥插入 PuTTY,您还可以使用 Pageant。
  Pageant 是一个 SSH 代理,与 PuTTY 一​​起提供。
  有了这个程序,使用私钥连接到您的服务器就更容易了。
  如果您使用 Pageant,则无需一遍又一遍地输入密码,只要您使用密码保护了您的私钥。
  首先,在 Windows 搜索栏中搜索 Pageant。执行此程序后,它将出现在 Windows 系统托盘中:

 /uploads/images/202504/08/3269125437964b7bf6a8fb17da40599c.jpg  
  要将私钥导入 Pageant,请右键单击 Pagent 图标,然后单击“添加密钥”。
  文件资源管理器将打开,您需要选择您的私钥。如果您决定使用密码保护您的私钥,系统将要求您输入密码。
  现在,您只需登录到您的服务器,而无需在每次启动 SSH 连接时提示您输入密码。
  注意:重启本地计算机后,您需要再次导入您的私钥。
  测试 SSH 密钥验证并禁用密码验证:
  成功生成密钥对、将公钥上传到服务器并使用私钥创建 PuTTY 配置文件后,现在是时候测试新的登录方法是否有效了。
  测试 SSH 密钥认证
  要测试您的新身份验证方法是否有效,只需使用您刚刚创建的 PuTTY 配置文件登录到您的服务器。双击配置文件后,将打开一个控制台,提示您输入您的用户名,通常是root。
  输入用户名并按 [Enter] 确认后,您将登录。除此之外,登录过程中将出现以下消息:“使用公钥 <key comment> 进行身份验证”。
  禁用密码验证
  选择 ssh-key 认证作为登录方式的原因是为了服务器安全。因此,现在禁用密码认证是合乎逻辑的。
  为此,请使用以下命令打开 sshd_config:  

nano /etc/ssh/sshd_config

  现在将以下值设置为“否”:
  质询响应认证
  密码验证
  使用PAM
  为了避免滚动整个配置来查找需要更改的值,您可以按 [CTRL+W] 打开搜索字段。输入值的名称,然后按 Enter。
  如果某些值前面有 # 注释掉,只需将其删除即可。
  使用 [CTRL+O] 保存更改并使用 [CTRL+X] 关闭编辑器
  删除 SSH 密钥验证并重新启用密码验证:
  如果您想返回密码验证,您只需将 sshd_config 中的值设置回“是”。
  然后使用以下命令删除 .ssh 文件夹及其内容: 

rm -R /root/.ssh

     使用以下命令重新启动 ssh 服务: 

 systemctl restart ssh

相关内容

美国直播网络专线租用核心注意事项与实战指南   网站目录文件访问失效的诊断全思路 HTTP请求遭拒的排查思路从客户端到服务器 高并发出现TCP的accept系统调用性能差怎么办 Linux grep命令基础和高阶用法总结 Ubuntu Linux中通过终端连接WiFi的过程 用SysMonTask监控Linux系统资源使用情况 在线DDoS压力测试与传统压力测试有什么区别 用Crontab实现Linux系统启动时自动执行任务 Windows开发项目选择应用程序框架的核心策略及实践
返回

24/7/365 全天候支持我们时刻恭候您

帮助中心