如何在 Rocky Linux 9 上设置 SSH 密钥

介绍

SSH,或安全壳,是一种用于管理和与服务器通信的加密协议. 当您使用Rocky Linux服务器时,您很可能将大部分时间花在通过SSH连接到您的服务器的终端会话中。

在本指南中,我们将专注于为 Rocky Linux 9 服务器设置 SSH 密钥。

步骤1:创建 RSA 密钥对

第一步是在客户端机器(通常是本地计算机)上创建一个密钥对:

1[environment local]
2ssh-keygen

默认情况下,ssh-keygen将创建一个 2048 位 RSA 密钥对,这对于大多数用例来说是足够安全的(您可以选择通过-b 4096旗帜创建一个更大的 4096 位密钥)。

在输入命令后,你应该看到以下提示:

1[environment local]
2[secondary_label Output]
3Generating public/private rsa key pair.
4Enter file in which to save the key (/your_home/.ssh/id_rsa):

ENTER,将密钥对保存到您的主目录中的.ssh/子目录中,或指定替代路径。

如果您之前已经生成了一个 SSH 密钥对,您可能会看到以下提示:

1[environment local]
2[secondary_label Output]
3/home/your_home/.ssh/id_rsa already exists.
4Overwrite (y/n)?

如果您选择在磁盘上重写密钥,您将无法再使用以前的密钥进行身份验证。当选择时要非常小心,因为这是一个破坏性的过程,无法逆转。

然后你应该看到以下快速:

1[environment local]
2[secondary_label Output]
3Enter passphrase (empty for no passphrase):

在这里,您可以选择输入一个安全的密码,这是非常建议的。 密码添加了额外的安全层到您的密钥,以防止未经授权的用户登录。

然后你应该看到以下的输出:

 1[environment local]
 2[secondary_label Output]
 3Your identification has been saved in /your_home/.ssh/id_rsa.
 4Your public key has been saved in /your_home/.ssh/id_rsa.pub.
 5The key fingerprint is:
 6a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
 7The key's randomart image is:
 8+--[ RSA 2048]----+
 9|     ..o         |
10|   E o= .        |
11|    o. o         |
12|        ..       |
13|      ..S        |
14|     o o.        |
15|   =o.+.         |
16|. =++..          |
17|o=++.            |
18+-----------------+

您现在有可用于身份验证的公共和私钥,下一步是将公共密钥带到您的服务器,以便您可以使用基于 SSH 密钥的身份验证来登录。

步骤 2 — 将公共密钥复制到您的Rocky Linux服务器

最快的方法来复制您的公共密钥到Rocky Linux主机是使用一个名为ssh-copy-id的实用程序. 如果您在客户端机上没有可用的ssh-copy-id,您可以使用以下两种替代方法之一(通过基于密码的SSH复制或手动复制密钥)。

使用ssh-copy-id复制您的公共密钥

「ssh-copy-id」工具默认包含在许多操作系统中,因此您可以在本地系统上使用它。

要使用该实用程序,您只需要指定您想要连接的远程主机和您具有密码SSH访问权限的用户帐户。

1[environment local]
2ssh-copy-id username@remote_host

你可能会看到以下消息:

1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes

这意味着您的本地计算机无法识别远程主机,这将发生在您首次连接到新主机时。

接下来,该实用程序将扫描您的本地帐户以获取我们之前创建的 id_rsa.pub 密钥.当它找到密钥时,它将提示您寻找远程用户帐户的密码:

1[environment local]
2[secondary_label Output]
3/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
4/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
5[email protected]'s password:

输入密码(您的输入不会出现在安全目的)并按ENTER。 该实用程序将使用您提供的密码连接到远程主机上的帐户,然后将您的~/.ssh/id_rsa.pub键的内容复制到远程帐户的~/.ssh/authorized_keys文件中。

你应该看到以下结果:

1[environment local]
2[secondary_label Output]
3Number of key(s) added: 1
4
5Now try logging into the machine, with:   "ssh '[email protected]'"
6and check to make sure that only the key(s) you wanted were added.

您可以继续到 步骤 3

使用 SSH 复制公共密钥

如果您没有可用的ssh-copy-id,但您有基于密码的 SSH 访问到您的服务器上的帐户,您可以使用更传统的 SSH 方法上传您的密钥。

我们可以通过使用cat命令在本地计算机上读取公共 SSH 密钥的内容,并通过 SSH 连接到远程服务器进行管道。

另一方面,我们可以确保~/.ssh目录存在并在我们正在使用的帐户下具有正确的权限。

然后,我们可以将我们输出的内容输入到该目录中的名为authorized_keys的文件中,我们将使用>>重定向符号来附加内容,而不是重写内容,这将允许我们添加密钥而不会破坏之前添加的任何密钥。

整个命令看起来是这样的:

1[environment local]
2cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

你可能会看到以下消息:

1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes

这意味着您的本地计算机无法识别远程主机,这将发生在您首次连接到新主机时。

之后,您应该被要求输入远程用户帐户密码:

1[environment local]
2[secondary_label Output]
3[email protected]'s password:

输入密码后,您的 id_rsa.pub 密钥的内容将被复制到远程用户帐户的 authorized_keys 文件的末尾。如果成功,继续到 步骤 3

手动复制公共密钥

如果您没有基于密码的 SSH 访问到您的服务器,您将不得不手动完成上述过程。

我们将手动添加您的 id_rsa.pub 文件的内容到您的远程计算机上的 ~/.ssh/authorized_keys 文件。

要显示你的 id_rsa.pub 密钥的内容,请在本地计算机中输入:

1[environment local]
2cat ~/.ssh/id_rsa.pub

您将看到密钥的内容,该内容应该看起来像这样:

1[environment local]
2[secondary_label Output]
3ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== sammy@host

使用您可用的任何方法登录您的远程主机。

一旦你在远程服务器上访问了你的帐户,你应该确保~/.ssh目录存在,如果有必要,这个命令将创建目录,或者如果它已经存在的话,不要做任何事情:

1mkdir -p ~/.ssh

现在,您可以在该目录中创建或修改authorized_keys文件. 您可以将您的id_rsa.pub文件的内容添加到authorized_keys文件的末尾,必要时使用以下命令创建它:

1echo public_key_string >> ~/.ssh/authorized_keys

在上述命令中,用您在本地系统上执行的cat ~/.ssh/id_rsa.pub命令的输出代替public_key_string

最后,我们将确保 ~/.ssh 目录和 autorized_keys 文件具有相应的权限设置:

1chmod -R go= ~/.ssh

这会反复删除对 ~/.ssh/ 目录的所有其他权限。

如果您使用root帐户为用户帐户设置密钥,则重要的是~/.ssh目录属于用户,而不是root:

1chown -R sammy:sammy ~/.ssh

在本教程中,我们的用户名为sammy,但您应该在上面的命令中代替相应的用户名。

我们现在可以尝试使用我们的Rocky Linux服务器进行基于密钥的身份验证。

步骤 3 — 使用 SSH 密钥登录您的 Rocky Linux 服务器

如果您已成功完成上述程序之一,您现在应该能够登录远程主机 without 远程帐户的密码。

初始过程与基于密码的身份验证相同:

1[environment local]
2ssh username@remote_host

如果这是你第一次连接到这个主机(如果你使用了上面的最后一种方法),你可能会看到这样的东西:

1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes

这意味着本地计算机无法识别远程主机,输入,然后按进入继续。

如果您在步骤 1 中创建密钥对时没有提供密码,您将立即登录。如果您提供密码,您将被要求现在输入密码。

如果基于密钥的身份验证成功,请继续学习如何通过禁用 SSH 服务器的基于密码的身份验证来进一步保护您的系统。

步骤 4 – 在您的服务器上禁用密码身份验证

如果您能够在没有密码的情况下使用 SSH 登录您的帐户,则已成功配置 SSH 基于密钥的身份验证。

在完成本节中的步骤之前,请确保您在这个服务器上为 root 帐户配置了基于 SSH 密钥的身份验证,或者最好是为这个服务器上具有sudo权限的非 root 帐户配置了基于 SSH 的身份验证。

一旦您确认您的远程帐户具有管理权限,请使用 SSH 密钥登录您的远程服务器,无论是作为 root,还是使用具有sudo权限的帐户。

1sudo vi /etc/ssh/sshd_config

在文件中,搜索一个名为PasswordAuthentication的指令。这可能会用#哈希评论。按ivi放入插入模式,然后放弃评论,并将值设置为No

1[label /etc/ssh/sshd_config]
2...
3PasswordAuthentication no
4...

当您完成更改时,请按ESC,然后按wq,将更改写入文件并停止。

1sudo systemctl restart sshd

作为预防措施,打开一个新的终端窗口,并在关闭当前会话之前测试 SSH 服务是否正常运作:

1[environment local]
2ssh username@remote_host

一旦您验证您的 SSH 服务仍然正常工作,您可以安全地关闭所有当前的服务器会话。

您的 Rocky Linux 服务器上的 SSH 示威器现在只响应 SSH 密钥. 基于密码的身份验证已成功禁用。

结论

您现在应该在您的服务器上配置基于 SSH 密钥的身份验证,允许您在不提供帐户密码的情况下登录。

如果您想了解有关使用 SSH 的更多信息,请参阅我们的 SSH 基本指南

Published At
Categories with 技术
comments powered by Disqus