介绍
SSH,或安全外壳协议,是一种用于管理和与服务器通信的加密协议。在使用Rocky Linux服务器时,您很可能会在通过SSH连接到服务器的终端会话中度过大部分时间。
在本指南中,我们将重点介绍为Rocky Linux 9服务器设置SSH密钥。SSH密钥提供了一种直接、安全的登录服务器的方法,建议所有用户使用。
步骤1 —— 创建RSA密钥对
第一步是在客户机上(通常是您的本地计算机)创建一个密钥对:
- ssh-keygen
默认情况下,ssh-keygen
将创建一个2048位的RSA密钥对,这对于大多数用例来说是足够安全的(您可以选择传入-b 4096
标志以创建更大的4096位密钥)。
输入命令后,您应该会看到以下提示:
OutputGenerating 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)?
如果您选择覆盖磁盘上的密钥,则将无法再使用先前的密钥进行身份验证。在选择是时要非常小心,因为这是一个不可逆的过程。
然后,您应该看到以下提示:
OutputEnter passphrase (empty for no passphrase):
在这里,您可以选择输入一个安全口令,这是强烈推荐的。口令可以为您的密钥增加额外的安全层,以防止未经授权的用户登录。
接下来,您应该看到以下输出:
OutputYour 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 密钥的身份验证进行登录。
第二步 — 将公钥复制到您的 Rocky Linux 服务器
将您的公钥复制到 Rocky Linux 主机的最快方法是使用一个名为 ssh-copy-id
的实用工具。如果可用,强烈建议使用此方法。如果您在客户机上没有 ssh-copy-id
,则可以使用以下两种备用方法之一(通过基于密码的 SSH 复制,或手动复制密钥)。
使用ssh-copy-id
复制您的公钥
ssh-copy-id
工具通常默认包含在许多操作系统中,因此您可能在本地系统上已经拥有它。为使此方法生效,您必须已经具有基于密码的SSH访问权限到您的服务器。
要使用此实用程序,您只需指定要连接的远程主机和您已具有密码SSH访问权限的用户帐户。这是您的公共SSH密钥将被复制到的帐户:
- ssh-copy-id username@remote_host
您可能会看到以下消息:
OutputThe 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
文件中。
您应该看到以下输出:
OutputNumber 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"
您可能会看到以下消息:
OutputThe 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
继续。
随后,您应该被提示输入远程用户帐户密码:
Outputusername@203.0.113.1's password:
输入密码后,您的id_rsa.pub
密钥的内容将被复制到远程用户帐户的authorized_keys
文件的末尾。如果操作成功,请继续第三步。
手动复制公钥
如果您无法使用基于密码的SSH访问服务器,则必须手动完成上述流程。
我们将手动将您的id_rsa.pub
文件的内容追加到您远程计算机的~/.ssh/authorized_keys
文件中。
要显示您的id_rsa.pub
密钥的内容,请在本地计算机上键入以下内容:
- cat ~/.ssh/id_rsa.pub
您将看到密钥的内容,应该类似于以下内容:
Outputssh-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_string
替换来自您在本地系统上执行的cat ~/.ssh/id_rsa.pub
命令的输出。它应该以ssh-rsa AAAA...
开头。
最后,我们将确保~/.ssh
目录和authorized_keys
文件具有适当的权限设置:
- chmod -R go= ~/.ssh
这会递归地移除~/.ssh/
目录的所有“组”和“其他”权限。
如果您正在使用root
账户为用户账户设置密钥,那么确保~/.ssh
目录属于用户而不是root
也很重要:
- chown -R sammy:sammy ~/.ssh
在本教程中,我们的用户名为sammy,但您应该将适当的用户名替换到上述命令中。
现在,我们可以尝试使用密钥对进行身份验证来登录我们的Rocky Linux服务器。
第3步 — 使用SSH密钥登录到您的Rocky Linux服务器
如果您已成功完成上述程序之一,现在应该能够登录到远程主机without使用远程帐户的密码。
初始过程与基于密码的身份验证相同:
- ssh username@remote_host
如果这是您第一次连接到此主机(如果您使用了上述的最后一种方法),您可能会看到类似以下的内容:
OutputThe 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步创建密钥对时未提供密码,您将立即登录。如果提供了密码,系统将提示您输入密码。身份验证成功后,应为您打开一个新的shell会话,使用Rocky Linux服务器上配置的帐户。
如果基于密钥的身份验证成功,请继续学习如何通过禁用SSH服务器的基于密码的身份验证来进一步保护系统。
第4步 — 在您的服务器上禁用密码身份验证
如果您能够使用SSH无密码登录到您的帐户,您已成功配置SSH基于密钥的身份验证到您的帐户。但是,您的基于密码的身份验证机制仍然处于活动状态,这意味着您的服务器仍然容易受到暴力攻击。
在完成本节中的步骤之前,请确保您已经为此服务器上的 root 账户配置了基于 SSH 密钥的身份验证,或者更好的是,您已经为此服务器上的非 root 账户配置了基于 SSH 密钥的身份验证,并具有 sudo
权限。这一步将锁定基于密码的登录,因此确保您仍然能够获得管理访问权限至关重要。
确认您的远程账户具有管理员权限后,使用 SSH 密钥登录到远程服务器,可以是 root 或具有 sudo
权限的账户。然后,打开 SSH 守护程序的配置文件:
- sudo vi /etc/ssh/sshd_config
在文件内,搜索名为 PasswordAuthentication
的指令。该指令可能被带有 #
符号的注释行注释掉了。按下 i
键将 vi
切换到插入模式,然后取消注释该行并将值设置为 no
。这将禁用通过账户密码通过 SSH 登录的能力:
...
PasswordAuthentication no
...
完成修改后,按 ESC
键,然后输入 :wq
以将更改写入文件并退出。要实际实施这些更改,我们需要重新启动 sshd
服务:
- sudo systemctl restart sshd
作为预防措施,请打开一个新的终端窗口,并在关闭当前会话之前测试 SSH 服务是否正常运行:
- ssh username@remote_host
一旦您验证了 SSH 服务仍然正常工作,您就可以安全地关闭所有当前的服务器会话。
您的 Rocky Linux 服务器上的 SSH 守护程序现在只响应 SSH 密钥。基于密码的身份验证已成功被禁用。
结论
您现在应该已经在您的服务器上配置了基于SSH密钥的身份验证,允许您登录而无需提供帐户密码。
如果您想了解更多关于使用SSH的信息,请查看我们的SSH基础指南。
Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-rocky-linux-9