行业新闻与博客

如何在 Linux 中设置无密码 SSH

SpyCloud 于 2022 年从暗网恢复了 7.215 亿份被盗凭证。不要成为下一个受害者。无密码!保护攻击者最喜欢的网络入口点之一。了解如何在 Linux 中无密码登录 SSH。

2022 年,Linux 恶意软件数量创下历史新高,Atlas VPN 研究人员报告称,同比增长 50%,仅第四季度就增长了 117%。这表明,虽然与其他操作系统相比,Linux 仍然是“更安全”的选择之一,但它也不能免受安全威胁。

您是否仍然使用用户名和密码通过安全外壳 (SSH) 登录服务器?它可能会使您的服务器和组织面临凭证被盗的风险;登录信息是地下犯罪市场中最受欢迎的物品之一。

是时候行动了!通过四个简单步骤即可了解如何:

如何通过 4 步在 Linux 中设置无密码 SSH

我记得当我开始从事网络托管工作时。当时,许多客户使用不安全的文件传输协议(FTP)向网站下载和上传文件。随后 SSH 出现并立即流行起来,成为几乎不可或缺的工具。为什么?因为它是一种网络通信协议,允许使用加密技术来:

  • 执行命令,
  • 传输文件,
  • 配置远程服务器,以及
  • 远程管理系统和应用程序。

优势?由于通信是加密的,因此数据传输可以防止窃听者和危险的中间人攻击。

SSH 支持多种身份验证方法,但最广泛使用的两种是基于密码的身份验证和基于公钥的身份验证。使用基于密钥的身份验证,您不必使用密码(因此也称为无密码 SSH);这是可选的。由于 Verizon 认为凭据被盗是 Web 应用程序泄露的主要原因,因此考虑使用后者可能是明智之举。

想尝试一下吗?在 Linux 中设置无密码非常简单,只需要四个快速步骤。对于本次演示,我们将使用 Ubuntu 20 LTS。

1. 检查您的客户端是否已有 SSH 密钥

您是否 100% 确定您的设备上没有保存 SSH 密钥对?为了安全起见,在 Linux 中设置不带密码的 SSH 之前先验证一下您是否这样做总是更好。您不想最终覆盖现有的密钥,对吗?要检查是否有任何现有密钥:

  • 使用快捷方式(即按 CTRL+ALT+T 键)或单击破折号栏上的“显示应用程序”按钮打开终端。
  • 在搜索框中键入终端并选择它。
  • 运行命令ls -al ~/.ssh/id_*.pub。如果您收到“没有这样的文件或目录”或“找不到匹配项”之类的错误消息(如下面的屏幕截图所示),则意味着您没有任何 SSH 密钥,可以继续执行步骤 2。
如何在 Linux 中设置无密码 SSH 的屏幕截图
图片说明:现在我确定我的设备上没有任何 SSH 密钥,我可以继续下一步。

您是否发现您已经拥有一对密钥?然后,您可以直接进入步骤 3 继续在 Linux 中设置无密码 SSH,也可以按照步骤 2 中的说明备份旧密钥并生成新密钥。 

2. 在 Linux 中生成无密码 SSH 的 SSH 密钥对

SSH 密钥是通过密钥生成器工具生成的。该工具使用单向(即不可逆)数学公式(即算法)来创建公钥和私钥对。该工具包含在 SSH 命令行工具套件中。

要在本地计算机上生成密钥对:

  • 在打开的终端中输入SSH-keygen并按Enter

在本例中,由于我们没有指定特定的密钥算法,因此它将自动生成基于 Rivest–Shamir–Adleman (RSA) 的密钥。SSH 还支持其他算法,例如过时的数字签名算法 (DSA) 和新的椭圆曲线数字签名算法 (ECDSA)。但是,为了避免兼容性问题,我们现在将使用 RSA。如果您希望使用不同的算法,您所要做的就是将-t后跟所选算法名称添加到同一命令中。例如,SSH-keygen -t dsa。     

使您能够在 Linux 中生成 SSH 密钥的命令的屏幕截图
图片说明:通过输入命令SSH-keygen,您的密钥对将使用默认的 RSA 算法创建。
  • 出现提示后,输入要存储 RSA 私钥的文件的路径。要添加额外的安全层,您可能需要确保您的私钥存储在安全位置(例如,在Sectigo 证书管理器)。这是您所有密钥和各种证书的一站式商店,使安装、发现和续订变得轻而易举。为简单起见,我们在此示例中坚持使用默认文件夹(即~/.ssh)。
命令行工具的屏幕截图显示了可以在 Linux 中生成 SSH 密钥的示例
图片说明:生成密钥时,系统会显示默认文件位置。只需按 Enter 键即可接受。
  • 接下来,您可以选择通过创建密码来添加另一层安全性。您不想添加密码吗?只需将其留空并按Enter即可。否则,选择一个密码并将其输入终端。请注意,当您输入它时,看起来就像您没有输入任何内容。别担心,你是的;不显示你输入的内容只是隐藏这个秘密不被窥探的一种方法。完成后,您必须重新输入密码来确认。从现在开始,您仅在开始新会话时才需要输入此密码。

专家提示:为什么要麻烦呢?有时,开发人员和系统管理员使用没有密码的 SSH,因为它对于全自动系统来说很方便。我的建议?如果可以的话,不要这样做。在这里使用密码将为您提供额外的安全保护,而且您只需要在每个会话开始时输入一次密码即可。

在 Linux 中设置无密码 SSH 时的密码提示的屏幕截图
图片说明:输入您选择的密码,确保您的密钥安全并免受攻击者的侵害。重新输入以进行验证。

恭喜!您刚刚生成了密钥对。正如您所看到的,在这种情况下,私钥(即id_rsa)和公钥(即id_rsa.pub)都存储在.SSH 文件夹下。

显示生成的 SSH 公钥生成确认的屏幕截图
图片说明:生成后,系统将向您确认密钥已保存在哪个文件夹中。

系统还将向您显示密钥指纹和所使用的算法(例如,安全算法 SHA-256)。

可用于 Linux 中无密码 SSH 的示例 SSH 密钥指纹的屏幕截图
图片说明:系统将向您显示所使用的算法、其指纹以及关键的随机艺术图像。

想确保它成功吗?使用我们在步骤 1 中使用的命令仔细检查它:

ls -al ~/.ssh/id_*.pub
Linux keygen 相关验证命令截图
图片说明:现在密钥对已经生成,在系统中搜索公钥时,您应该不会再收到错误消息。

或者,

  • 使用命令ls -l /home/your_username/.ssh/并检查 .ssh 目录的内容以查明您的设备上是否已保存公钥和私钥。
Linux 命令行示例屏幕截图
图片说明:如果您可以看到如图所示的两个密钥文件,则意味着您的私钥和公钥都已生成并正确保存在您的设备上。

3. 复制您的 SSH 公钥

您现在所要做的就是确保您可以访问远程服务器,而无需输入您的凭据。你是怎样做的?只需复制公钥并将其上传到服务器即可。

  • 在终端中,键入命令SSH-copy-id,后跟服务器的用户名及其 IP 地址或主机名(如下所示):
显示如何在 Linux 中复制 SSH 公钥的屏幕截图
图片说明:这是将 SSH 公钥复制到服务器的方法
  • 出现提示时,输入您通常用于访问服务器的密码。和以前一样,看起来您没有输入任何内容(这是针对肩窥等威胁的安全保护)。经过身份验证后,您的公钥将被添加到远程用户授权的密钥文件中。

4. 通过登录服务器在 Linux 中测试无密码 SSH

你做到了!不过,在开始庆祝之前,是时候测试一下在 Linux 中设置无密码 SSH 是否有效。如何?通过在终端中输入以下命令来尝试通过 SSH 登录远程服务器:

SSH server_username@server_ip_address (or hostname)
显示如何在 Linux 中无需密码测试 SSH 密钥的屏幕截图
图片说明:通过登录服务器来测试 Linux 中的无密码 SSH。

你进去了吗?成功!你没有?请继续阅读一些故障排除提示。

在 Linux 中设置无密码 SSH 时的故障排除

如果它不起作用,您可能需要检查以下内容:

您是否将公钥复制到正确的位置?

使用您的用户名和密码登录您的服务器。导航到远程服务器的主目录,并使用命令cat .ssh/authorized_keys验证公钥是否位于~/.ssh/authorized_keys 文件中

如果不是,请将其移动并再次尝试无密码登录。

“~/.ssh/”目录权限是否设置为 700,“~/.ssh/authorized_keys”目录权限设置为 600?

导航到~/.ssh目录并验证权限如果它们设置不正确,请使用以下命令更改它们:

  • chmod 700 ~/.ssh — 使用此命令可防止除您之外的任何人访问该目录,并且
  • chmod 600 ~/.ssh/authorized_keys — 此命令确保您是唯一有权读取和写入该文件的人。

有兴趣了解有关文件权限的更多信息吗?Akamai 发表了一篇关于它的相当详尽的文章。

您的远程服务器上的 SSH 服务器是否配置为允许公钥身份验证?

为了验证这一点, 

  • 转到/etc/SSH/sshd_config文件并使用您选择的编辑器打开它。
  • 检查“PubkeyAuthentication”选项是否设置为“是”。如果不是,请更改它,保存文件,然后重新启动 SSH 服务。

可选步骤:禁用 SSH 密码身份验证

想要为您的远程服务器连接添加终极安全措施,并将其转变为像夏延山的北美防空司令部 (NORAD) 一样安全吗?然后,您需要通过执行以下操作来禁用 SSH 中的密码身份验证选项:

  1. 使用以下命令以 root 身份登录到远程服务器:SSH sudo_user@server_ip_address
  2. 导航到 SSH 配置文件,通常位于/etc/SSH/sshd_config 的 .SSH 文件夹中。
  3. 使用您选择的编辑器打开它,并将以下所有条目设置为“否”:
    1. 密码验证。
    2. 质询响应身份验证。
    3. 使用 PAM。
  4. 保存文件并使用以下命令之一重新启动 SSH 服务:
    1. sudo systemctl restart SSH(对于 Ubuntu 和 Debian 服务器),或者
    2. sudo systemctl restart sshd(适用于 Fedora 或 CentOS 服务器)。

您是否仍然想知道为什么应该花一些宝贵的时间在 Linux 中设置无密码 SSH,因为 SSH 已经通过加密提供了安全连接?我们为您提供了一些见解,可能会让您重新考虑刚刚学到的知识的价值。

为什么应该选择在 Linux 中使用无密码 SSH?

首先,凭证是您王国(组织)的钥匙,网络犯罪分子会被它们吸引,就像吸血鬼被血液所吸引一样。他们喜欢通过网络钓鱼和中间人攻击来瞄准他们。但坏人怎么能偷走不存在的东西呢?Linux 中的无密码 SSH 将游戏提升到了一个不同的水平:

1. 无密码 SSH 比传统的基于密码的 SSH 更难受到攻击

无论您的密码多么复杂,攻击者都有办法破解它们。而且,在某些情况下,这些妥协根本超出了您的控制范围。考虑一下最近 6,000 多名 Norton LifeLock 客户和 Last Pass 密码保管库发生的事情。

您是否有写下密码或在多个帐户中重复使用密码的习惯?这两种做法都是坏主意。如果您丢失了这些书面笔记或使用相同密码的其他帐户遭到泄露怎么办?……哎呀!恶意的第三方可能会找到您的密码,那么您就完了。

您和您的管理员永远不会这样做?我相信你不会,但这种情况确实发生了,正如最新的 GitGuardian 报告所证明的那样,该报告显示,仅 2022 年,开发人员在 GitHub 提交中就泄露了 1000 万个凭证。哎呀。

这就是生活;我们都会犯错。但通过使用正确的防御安全技术可以防止某些错误。如何?

  1. 消除容易受到暴力破解和网络钓鱼攻击的仅密码身份验证,
  2. 确保您安全地存储和保护您的私钥。
  3. 遵守 SSH 密钥管理最佳实践。

由于密钥不会过期,因此您必须妥善保管它们,否则可能会面临被泄露的风险。如果您采用这些技术,那么您就可以减轻许多风险。不再有通过中间人或暴力攻击窃取密码的情况。

该图展示了无密码 SSH 如何在使用 Linux 时帮助保护您的帐户
图片说明:Linux 中的无密码 SSH 可以保护您免受旨在窃取您登录远程服务器凭据的中间人攻击。
该图显示了 Linux 中无密码的 SSH 如何帮助保护您的帐户和资源免受暴力攻击
图片说明:即使网络犯罪分子拥有正确的凭据,如果您禁用了密码身份验证,他们也将无法访问您的服务器。

2、无密码 SSH 使用方便

您知道为什么许多开发人员在提交中保存项目用户名和密码吗?他们这样做的原因与您可能想在多个网站上使用相同密码的原因相同:方便。但是,如果攻击者设法访问您的凭据,这两种情况下的便利可能会让您付出相当大的代价。据 IBM 称,这可能比数据泄露的平均成本高出 15 万美元(到 2022 年,全球组织每次泄露的平均成本已经达到 435 万美元)。

在 Linux 中实现无密码 SSH 将为您带来最大程度的便利。但它也将消除您登录远程服务器时凭据被盗的风险。如何?好吧,当您开始会话时,您将不再需要输入它们。

3. Linux 中的无密码 SSH 易于管理

您是否曾经尝试过计算您必须记住(并且不时更改)多少个不同的密码?我数了一下我的帐户和密码,不管你信不信,我发现我有超过 85 个不同的帐户和密码。这是巨大的!我都记得吗?没有机会。我的小脑袋里没有足够的空间来容纳如此大量的官样文章。

使用 Linux 中的无密码 SSH,您将减少需要记住的凭据数量,并且不必担心定期更改密码。

但是,如果您将旧的、废弃的密钥忘记在某处并且网络犯罪分子发现了它们怎么办?(如果您没有正确管理密钥,因为它们不会过期,这是可能的。)这意味着找到它们的坏人仍然可以使用它们来访问您的服务器。这可能是个问题。解决方案?接下来我们将简要探讨另一个无密码选项。

如果您想探索一般情况下应该采用无密码身份验证的更多原因,请不要错过我们关于其优缺点的深入文章。 

关于如何在 Linux 中设置无密码 SSH 的最终想法

Linux 作为高度安全的操作系统在服务器管理员中越来越受欢迎。然而,流行不可避免地也会引起不必要的关注。事实上,随着越来越多的组织选择 Linux 服务器和平台,寻求扩大狩猎范围的网络犯罪分子的兴趣也在觉醒。

在 Linux 中设置无密码 SSH 并在远程服务器上禁用传统的基于用户名和密码的身份验证将帮助您加倍安全并让您高枕无忧。

是的,我们都知道,在网络安全中,没有什么是牢不可破的(无论您认为它有多安全)。但是,通过遵循本文中列出的四个步骤,您将在潜在的攻击者面前关上另一扇门,并学到新的东西。这是无价的。

需要帮助吗?联系我们的支持团队 在线客服