在 CentOS 7 上设置 SSH 密钥

文章最后更新时间:2023-07-26 23:37:24

图片[1]-在 CentOS 7 上设置 SSH 密钥-特资啦!个人资源分享站

关于此问题:

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

在本指南中,您将重点介绍如何为 CentOS 7 安装设置 SSH 密钥。SSH 密钥提供了一种简单、安全的方式来登录服务器,建议所有用户使用。

步骤 1 — 创建 RSA 密钥对

第一步是在客户端计算机(通常是您的计算机)上创建密钥对:

ssh-keygen

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

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

Output
Generating public/private rsa key pair.
Enter file in which to save the key (/your_home/.ssh/id_rsa):

按键对将密钥对保存到主目录的子目录中,或指定备用路径。ENTER .ssh/

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

Output
/home/your_home/.ssh/id_rsa already exists.
Overwrite (y/n)?

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

然后,您应该看到以下提示:

Output
Enter passphrase (empty for no passphrase):

在这里,您可以选择输入安全密码,强烈建议您输入。密码短语增加了一层额外的安全保护,以防止未经授权的用户登录。要了解有关安全性的更多信息,请参阅有关如何在 Linux 服务器上配置 SSH 密钥身份验证的教程。

然后,应会看到以下输出:

Output
Your identification has been saved in /your_home/.ssh/id_rsa.
Your public key has been saved in /your_home/.ssh/id_rsa.pub.
The key fingerprint is:
a9:49:2e:2a:5e:33:3e:a9:de:4e:77:11:58:b6:90:26 username@remote_host
The key's randomart image is:
+--[ RSA 2048]----+
|     ..o         |
|   E o= .        |
|    o. o         |
|        ..       |
|      ..S        |
|     o o.        |
|   =o.+.         |
|. =++..          |
|o=++.            |
+-----------------+

现在,您拥有可用于进行身份验证的公钥和私钥。下一步是将公钥放在服务器上,以便您可以使用基于 SSH 密钥的身份验证登录。

步骤 2 — 将公钥复制到 CentOS 服务器

将公钥复制到 CentOS 主机的最快方法是使用名为 的实用程序。由于其简单性,如果可用,强烈建议使用此方法。如果您的客户端计算机上没有可用的密钥,则可以使用本节中提供的两种替代方法之一(通过基于密码的 SSH 进行复制,或手动复制密钥)。ssh-copy-id ssh-copy-id

使用复制公钥 ssh-copy-id

默认情况下,该工具包含在许多操作系统中,因此您可以在本地系统上使用它。要使此方法起作用,您必须已经对服务器具有基于密码的 SSH 访问权限。ssh-copy-id

要使用该实用程序,您只需指定要连接到的远程主机以及您具有密码 SSH 访问权限的用户帐户。这是您的公共 SSH 密钥将被复制到的帐户。

语法为:

ssh-copy-id username@remote_host

您可能会看到以下消息:

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

这意味着您的本地计算机无法识别远程主机。这将在您首次连接到新主机时发生。键入并按以继续。yes ENTER

接下来,该实用程序将扫描您的本地帐户以查找您之前创建的密钥。找到密钥后,它将提示您输入远程用户帐户的密码:id_rsa.pub

Output
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/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
username@203.0.113.1's password:

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

应会看到以下输出:

Output
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'username@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.

此时,您的密钥已上传到远程帐户。您可以继续执行步骤3.id_rsa.pub

使用 SSH 复制公钥

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

为此,您可以使用命令读取本地计算机上公共 SSH 密钥的内容,并通过 SSH 连接到远程服务器。cat

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

然后,您可以将通过管道传输的内容输出到此目录中调用的文件中。您将使用重定向符号来追加内容,而不是覆盖它。这将允许您添加密钥,而不会破坏以前添加的密钥。authorized_keys >>

完整命令如下所示:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

您可能会看到以下消息:

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

这意味着您的本地计算机无法识别远程主机。这将在您首次连接到新主机时发生。键入并按以继续。yes ENTER

之后,系统应提示您输入远程用户帐户密码:

Output
username@203.0.113.1's password:

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

手动复制公钥

如果您没有对服务器的基于密码的 SSH 访问权限,则必须手动完成该过程。

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

若要显示密钥的内容,请在本地计算机中键入以下内容:id_rsa.pub

cat ~/.ssh/id_rsa.pub

您将看到密钥的内容,它应该如下所示:

Output
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

mkdir -p ~/.ssh

现在,您可以在此目录中创建或修改文件。您可以将文件的内容添加到文件的末尾,如有必要,请使用以下命令创建它:authorized_keysid_rsa.pubauthorized_keys

echo public_key_string >> ~/.ssh/authorized_keys

在上面的命令中,将 替换为您在本地系统上执行的命令的输出。它应该以 开头。public_key_stringcat ~/.ssh/id_rsa.pubssh-rsa AAAA…

最后,确保目录和文件具有适当的权限集:~/.sshauthorized_keys

chmod -R go= ~/.ssh

这将递归删除目录的所有“组”和“其他”权限。~/.ssh/

如果使用帐户为用户帐户设置密钥,则目录属于用户而不是 也很重要。在以下示例中,用户名为 sammy,但您应该将相应的用户名替换为命令。root~/.sshroot

chown -R sammy:sammy ~/.ssh

你现在可以尝试使用 CentOS 服务器进行无密码认证。

步骤 3 — 使用 SSH 密钥向 CentOS 服务器进行身份验证

如果您已成功完成上述过程之一,则应该能够在没有远程帐户密码的情况下登录到远程主机。

基本过程是相同的:

ssh username@remote_host

如果这是您第一次连接到此主机(如果您使用了上面的最后一种方法),您可能会看到如下所示的内容:

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

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

如果您没有为私钥提供密码,您将立即登录。如果您在创建私钥时提供了密码,系统将提示您立即输入密码。认证后,应会为你打开一个新的 shell 会话,并在 CentOS 服务器上使用已配置的帐户。

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

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

如果您能够在没有密码的情况下使用 SSH 登录到您的帐户,则您已成功为您的帐户配置基于 SSH 密钥的身份验证。但是,基于密码的身份验证机制仍处于活动状态,这意味着您的服务器仍会受到暴力攻击。

在完成本节中的步骤之前,请确保您为此服务器上的 root 帐户配置了基于 SSH 密钥的身份验证,或者最好为此服务器上具有权限的非 root 帐户配置了基于 SSH 密钥的身份验证。此步骤将锁定基于密码的登录,因此确保您仍然能够获得管理访问权限至关重要。sudo

确认远程帐户具有管理权限后,请使用 SSH 密钥(以 root 用户身份或使用具有权限的帐户)登录远程服务器。然后,打开 SSH 守护程序的配置文件:sudo

sudo vi /etc/ssh/sshd_config
...
PasswordAuthentication no
...

完成更改后,按 ,然后将更改写入文件并退出。若要实现这些更改,需要重新启动服务:ESC :wq sshd

sudo systemctl restart sshd.service

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

ssh username@remote_host

验证 SSH 服务后,您可以安全地关闭所有当前服务器会话。

CentOS 服务器上的 SSH 守护进程现在只响应 SSH 密钥。已成功禁用基于密码的身份验证。

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

 

 

© 版权声明
THE END
喜欢就点赞一下吧
点赞14 分享