分类
文章

如何在CentOS 8上设置SSH密钥

介绍

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

在本指南中,我们将重点介绍为CentOS 8服务器设置SSH密钥。SSH密钥提供了一种简单,安全的登录服务器的方法,建议所有用户使用。

步骤1 —创建RSA密钥对

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

  • ssh-keygen

默认情况下,ssh-keygen将创建一个2048位RSA密钥对,对于大多数用例而言,这对安全性足够高(您可以选择传入该-b 4096标志以创建一个更大的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)?

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

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

Output
Enter passphrase (empty for no passphrase):

在这里,您可以选择输入安全密码,强烈建议您输入。密码短语为您的密钥增加了一层额外的安全保护,以防止未经授权的用户登录。

然后,您应该看到以下输出:

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-copy-id。强烈建议您使用此方法。如果ssh-copy-id客户端计算机上没有可用的磁盘,则可以使用以下两种替代方法之一(通过基于密码的SSH复制或手动复制密钥)。

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

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

要使用该实用程序,您只需指定要连接的远程主机和具有密码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.

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

使用SSH复制公钥

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

我们可以使用以下cat命令来执行此操作:读取本地计算机上的公共SSH密钥的内容,并通过SSH连接到远程服务器来传递这些内容。

另一方面,我们可以确保该~/.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:

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

手动复制公钥

如果没有对服务器的基于密码的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== sammy@host

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

一旦可以访问远程服务器上的帐户,则应确保该~/.ssh目录存在。如果需要,此命令将创建目录;如果目录已经存在,则不执行任何操作:

  • mkdir -p ~/.ssh

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

  • echo public_key_string >> ~/.ssh/authorized_keys

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

最后,我们将确保~/.ssh目录和authorized_keys文件具有适当的权限集:

  • chmod -R go= ~/.ssh

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

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

  • chown -R sammy:sammy ~/.ssh

在本教程中,我们的用户名为sammy,但您应将适当的用户名替换为上述命令。

现在,我们可以使用我们的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

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

如果在步骤1中创建密钥对时未提供密码短语,则将立即登录。如果您提供了密码,将提示您立即输入密码。验证之后,应该使用CentOS服务器上配置的帐户为您打开一个新的Shell会话。

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

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

如果您能够使用SSH无需密码登录到帐户,则说明您已成功为帐户配置了基于SSH密钥的身份验证。但是,基于密码的身份验证机制仍然处于活动状态,这意味着您的服务器仍然容易受到暴力攻击。

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

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

  • sudo vi /etc/ssh/sshd_config

在文件内部,搜索名为的指令PasswordAuthentication。这可以用#哈希注释掉。按i投入vi到插入模式,并取消该行并将其值设置到no。这将禁用您使用帐户密码通过SSH登录的功能:

/ etc / ssh / sshd_config
...
PasswordAuthentication no
...

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

  • sudo systemctl restart sshd

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

  • ssh username@remote_host

确认SSH服务仍然正常运行后,就可以安全地关闭所有当前服务器会话。

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

结论

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注