Linux 服务器上的 SSH
SSH,也称为安全外壳,是一种可用于与服务器连接和通信的协议。您可以 连接到您的 Linux 服务器,以使用此加密协议进行终端会话。如果您使用的是 OpenSSH 服务器,身份验证过程主要有两种不同的方式。第一种是标准的基于密码的身份验证。在这里,您只需使用用户名 and 密码凭据即可访问您的帐户。另一种方法是将您的 Linux 服务器设置为基于 SSH 密钥的身份验证。
在本指南中,我们将重点介绍如何配置 Linux 服务器以将 SSH 密钥作为主要身份验证手段。我们还将讨论为什么 SSH 密钥通常比通常的密码保护机制更受欢迎。
什么是 SSH 密钥?
SSH 密钥类似于您用于登录服务器上帐户的凭据。您无需输入用户名和密码,而是使用 SSH 密钥对,它也是一种访问凭据。虽然这些密钥是加密的,但您必须将它们视为身份验证凭据,因为这就是它们的用途。
一个典型的 SSH 密钥包含两部分:授权密钥和身份密钥。授权密钥是公钥,它与您的私有身份密钥结合使用以允许您访问帐户。公钥位于您要通过 SSH 登录的远程服务器上,并保留在与您的用户帐户关联的 ~/.ssh/authorized_keys 文件中。身份密钥用于验证您作为正确用户的身份,以确保只有授权人员才能访问给定帐户。这些密钥统称为用户密钥,因为它们用于验证用户的身份。一旦服务器能够验证这两个密钥,就会启动一个 shell 会话以执行您的命令。
您还拥有主机密钥和会话密钥。该协议使用主机密钥对本地计算机、系统或服务器进行身份验证。会话密钥有助于对连接上的数据流进行加密。这使您的会话和相应的活动更加安全。
SSH 密钥优于密码保护
相比密码保护,更倾向于使用基于 SSH 密钥的身份验证的主要原因是,后者可能会使您容易受到网络攻击。大多数人为了在需要登录时能够记住密码,不会使用极其复杂的密码。因此,这创造了一个脆弱的领域。许多攻击者会使用暴力破解相对简单的密码并侵入帐户。由于自动化和先进的黑客技术,这在如今变得尤为容易。
另一方面,SSH 密钥提供了一种更安全的方式来访问您的帐户。正如我们之前提到的,此方法使用公钥和私钥来验证客户端的身份。虽然您可以与任何人共享公钥,但您需要对私钥保密。配对时,公钥会解密私钥以验证您的身份。此外,您还可以通过在密钥对之上添加密码短语来增加保护。我们将在本指南的后面部分详细讨论密码短语。然而,即使没有密码短语,您的私有 SSH 密钥在您的本地计算机上也是极其安全的。网络永远无法直接访问该密钥,该密钥位于受限目录中,并辅以受限权限。
生成 SSH 密钥
要生成 SSH 密钥对,您需要浏览 OpenSSH 工具套件并找到 ssh-keygen。这是一个特殊的实用工具,允许您生成大约 2048 位大小的 SSH 密钥对。首先运行以下命令:
|
1 |
ssh-keygen |
这将提示以下消息:
|
1 2 |
正在生成 公钥/私钥 rsa 密钥 对. 输入 文件 在 其中 以 保存 该 密钥 (/home/username/.ssh/id_rsa): |
该消息将生成一个名为 id_rsa 的私钥和一个名为 id_rsa.pub 的公钥。此时,您可以选择要将密钥保存在何处。我们建议按回车键(Enter)以保留默认位置。保留默认位置可确保每当您使用该系统登录时,服务器都会自动定位并验证密钥。默认位置是主目录中的 ~/.ssh 目录。如果您希望选择其他位置,请输入该位置。
重写旧的 SSH 密钥
需要注意的是,您的系统上一次只能有一个 SSH 密钥对。这意味着,如果您之前在系统上生成并保存过密钥对,您将看到以下消息:
|
1 2 |
/home/username/.ssh/id_rsa 已经 存在. 覆盖 (y/n)? |
要继续创建并保存新的 SSH 密钥对,您必须删除现有的密钥对。请记住:如果您覆盖了已保存在磁盘上的密钥,您将无法再将其用于身份验证。这是一个不可逆的过程,因此请确保您绝对确定要覆盖旧的密钥对。
设置密码短语
在目录中设置好密钥后,系统会询问您是否要提供密码短语:
|
1 2 3 |
已创建 目录 '/home/username/.ssh'. 输入 密码短语 (留空 表示 无 密码短语): 输入 相同的 密码短语 再次: |
密码短语是可选的 - 您可以选择跳过它。但是,它通过在磁盘上加密您的私钥,为您的私钥增加了一层额外的安全性。如果您选择使用密码短语,则每次尝试使用此 SSH 密钥对登录时,都必须正确输入该密码短语:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
您的 身份标识 已 被 保存 在 /home/username/.ssh/id_rsa. 您的 公开 密钥 已 被 保存 在 /home/username/.ssh/id_rsa.pub. 该 密钥 指纹 是: a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host 该 密钥'的 随机图像 图像 是: +--[ RSA 2048]----+ | ..o | | E o= . | | o. o | | .. | | ..S | | o o. | | =o.+. | |. =++.. | |o=++. | +-----------------+ |
最后,您现在应该已经拥有了可用于验证客户端的 SSH 密钥。
将您的 SSH 密钥嵌入到您的服务器账户中
在使用密钥进行身份验证之前,您需要将公钥嵌入到远程 Linux 服务器中。接下来,我们将向您展示在创建 CloudSigma 服务器时如何操作。首先,您需要找到您的 SSH 公钥,以便复制并粘贴它。如果您使用了上述方法生成 SSH 密钥对,可以通过输入以下命令来找到公钥:
|
1 |
cat ~/.ssh/id_rsa.pub |
这将导致 SSH 公钥像这样弹出:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNqqi1mHLnryb1FdbePrSZQdmXRZxGZbo0gTfglysq6KMNUNY2VhzmYN9JYW39yNtjhVxqfW6ewc+eHiL+IRRM1P5ecDAaL3V0ou6ecSurU+t9DR4114mzNJ5SqNxMgiJzbXdhR+j55GjfXdk0FyzxM3a5qpVcGZEXiAzGzhHytUV51+YGnuLGaZ37nebh3UlYC+KJev4MYIVww0tWmY+9GniRSQlgLLUQZ+FcBUjaqhwqVqsHe4F/woW1IHe7mfm63GXyBavVc+llrEzRbMO111MogZUcoWDI9w7UIm8ZOTnhJsk7jhJzG2GpSXZHmly/a/buFaaFnmfZ4MYPkgJD username@example.com |
复制此值以便稍后使用。在使用 CloudSigma 创建服务器时,您可以在选择服务器大小和操作系统镜像后选择添加 SSH 密钥:

点击“添加”并粘贴您复制的内容,以将 SSH 密钥嵌入到您的服务器中。这样,每次启动服务器时,它都将已经包含注入的 SSH 密钥。
将公钥复制到现有服务器
虽然上述方法适用于创建新服务器的情况,但能否将 SSH 密钥嵌入到现有服务器中呢?答案是肯定的,并且有多种方法可以做到这一点,具体取决于您现有的工具。
使用 SSH-Copy-ID
这是复制公钥最简单、最容易的方法。您只需要在标准 OpenSSH 套件中找到的 ssh-copy-id 实用工具。但在使用此方法之前,请确保您的服务器上已启用基于密码的身份验证。要复制密钥,您将应用 ssh-copy-id 语法,然后输入您希望连接的远程主机。您还需要指定要连接的账户。您需要拥有该账户的密码访问权限,以便将密钥复制到正确的位置。命令应该像这样:
|
1 |
ssh-copy-id username@remote_host |
这可能会导致屏幕上弹出如下所示的信息:
|
1 2 3 |
该真实性的主机 '111.111.11.111 (111.111.11.111)' 能'不 被确立. ECDSA 密钥指纹是 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 您确定要您想要 继续 连接 (是/否)? 是 |
这通常发生在您第一次连接到该特定远程主机时。它仅仅意味着计算机未能识别该主机。您只需输入“yes”并按回车键。完成此操作后,该工具将扫描账户以查找您的公钥。定位到公钥后,它会要求您输入账户密码:
|
1 2 3 |
/usr/bin/ssh-copy-id: INFO: 尝试去 登录入 使用该新 密钥(s), 去 过滤出任何那些是已经已安装 /usr/bin/ssh-copy-id: INFO: 1 密钥(s) 仍需去 被已安装 -- 如果 您是被提示现在它是 去 安装该新 密钥 用户名@111.111.11.111's 密码: |
接下来,您可以输入密码。连接到账户后,该工具将复制 ~/.ssh/id_rsa.pub 密钥的内容,并将其粘贴到远程账户 ~/.ssh 目录下的 authorized_keys 中。然后您将看到以下信息:
|
1 2 3 |
数量的密钥(s) 已添加: 1 现在尝试 登录到该机器, 使用: "ssh 'username@111.111.11.111'" 并 检查以 确保确定该仅该密钥(s) 您想要被已添加. |
这意味着您已成功将公钥复制到现有的远程服务器上。
使用 SSH
这是一种将公钥复制到服务器上的较为传统的方法。如果您无法使用 ssh-copy-id 工具,最好使用此方法。同样,您需要拥有对账户的密码访问权限。您实质上是在计算机上将公钥内容作为输出,并通过它们之间建立的 SSH 连接将其传输到远程服务器。为此目的使用的命令应如下所示:
|
1 |
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" |
如您所见,我们已指定应将密钥放置在服务器上 ~/.ssh 目录中的 authorized_keys 文件中。使用 >> 符号还可以确保我们是在添加密钥,而不是覆盖它们。运行该命令后,您可能会看到以下消息:
|
1 2 3 |
该 真实性 的 主机 '111.111.11.111 (111.111.11.111)' 不'能 被 确立. ECDSA 密钥 指纹 是 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 您 确定 要 继续 连接 吗 继续 连接 (是/否)? 是 |
与之前的提示类似,这意味着计算机无法识别远程主机。输入“yes”并按回车键继续。现在,您需要输入账户密码:
|
1 |
username@111.111.11.111'的 密码: |
密码验证通过后,密钥将被复制到您用户账户中指定的文件中。
手动
如果您无法通过密码访问远程服务器上的账户,可以手动复制公钥。目标是将 id_rsa.pub 文件中的值复制到远程设备上的 ~/.ssh/authorized_keys 文件中。正如我们所知,我们可以通过使用以下命令来查看 id_rsa.pub 密钥的值:
|
1 |
cat ~/.ssh/id_rsa.pub |
您的 SSH 公钥内容将如下所示:
|
1 |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test |
接下来,您需要通过任何可行的方式访问远程主机上的账户。登录后,检查并确保 ~/.ssh 目录存在。如果不存在,您可以运行以下命令来创建它:
|
1 |
mkdir -p ~/.ssh |
现在,您可以使用此命令将 id_rsa.pub 文件的内容添加到远程服务器上 ~/.ssh 目录中的 authorized_keys 文件中:
|
1 |
echo public_key_string >> ~/.ssh/authorized_keys |
在此命令中,您不需要输入“public_key_string”,而是需要输入之前通过运行 cat ~/.ssh/id_rsa.pub 命令提取的密钥内容。
使用您的 SSH 密钥进行身份验证
现在,您只需使用 SSH 密钥即可轻松登录您的账户。这意味着您不再需要密码即可访问服务器账户。您将使用通常用于登录的凭据:
|
1 |
ssh username@remote_host |
这可能会导致弹出以下消息:
|
1 2 3 |
该 真实性 的 主机 '111.111.11.111 (111.111.11.111)' 能'不 被 确立. ECDSA 密钥 指纹 是 fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe. 您 确定 吗 您 想要 去 继续 连接 (yes/no)? yes |
如果您看到此消息,请不要担心。这仅仅意味着本地系统无法识别远程主机。这通常发生在您第一次连接到该主机时。您只需输入“yes”并按回车键。回到前面的某些步骤,如果您设置了密码短语,这就是您需要输入它的地方。如果您没有设置,在 SSH 密钥通过验证后,您将直接登录到您的账户。这将在本地计算机上通过您当前的账户打开一个新的 shell 会话。
如何在服务器上禁用密码身份验证?
现在您已经知道如何设置 SSH 密钥,您需要禁用密码身份验证。即使您能够使用 SSH 密钥进行身份验证,如果您的密码身份验证过程处于活动状态,您仍然容易受到暴力破解攻击。在禁用密码身份验证机制之前,请确保基于 SSH 密钥的身份验证配置是服务器上的 root 账户,或者配置的账户具有 sudo 权限。确认这一点的目的是为了确保即使在禁用密码时,您仍保留对该账户的管理访问权限。现在您可以使用此 SSH 密钥登录您的服务器账户。下一步是打开 SSH 守护进程的配置文件:
|
1 |
sudo nano /etc/ssh/sshd_config |
在这里,您需要搜索以下指令:
|
1 |
PasswordAuthentication |
您需要取消注释此行并将值更改为“no”,如下所示:
|
1 |
PasswordAuthentication no |
这样做将禁用基于密码的身份验证。完成后只需保存文件并关闭它。最后,您需要重启设备以应用更改。如果您使用的是 Ubuntu 或 Debian 设备,您还可以使用以下命令来禁用基于密码的登录:
|
1 |
sudo service ssh restart |
为了确保您的守护进程(即 sshd)在 CentOS 或 Fedora 机器上的服务器上仅允许基于 SSH 的身份验证,请使用以下命令:
|
1 |
sudo service sshd restart |
结论
完成所有这些步骤后,您应该已经在服务器上配置并运行了基于 SSH 密钥的身份验证。现在,您可以放心,您的服务器是安全且受到保护的!
祝您使用愉快!
评论
暂无评论。发表第一条评论吧。