如何在Rocky Linux 9上设置SSH密钥
首先提出
SSH,又称为安全外壳协议,是一种用于管理和与服务器通信的加密协议。在使用Rocky Linux服务器时,你很可能会通过SSH与服务器建立终端会话,并且大部分时间都在这个终端会话中工作。
在本指南中,我们将专注于为Rocky Linux 9服务器设置SSH密钥。SSH密钥提供了一种简单、安全的登录服务器的方法,建议所有用户使用。
第一步 – 创建RSA密钥对
第一步是在客户机上创建一个密钥对(通常是您的本地计算机)。
- ssh-keygen
默认情况下,ssh-keygen将创建一个2048位的RSA密钥对,这对于大多数用途来说已足够安全(您可以选择性地使用-b 4096标志来创建更大的4096位密钥)。
输入命令后,您应该看到以下提示:
Generating public/private rsa key pair. Enter file in which to save the key (/your_home/.ssh/id_rsa):
按下回车键将密钥对保存到主目录下的.ssh/子目录,或指定其他路径。
如果您之前生成了一个SSH密钥对,您可能会看到以下提示:
/home/your_home/.ssh/id_rsa already exists. Overwrite (y/n)?
如果您选择在磁盘上覆盖密钥,以前的密钥将无法用于认证。选择“是”时要非常小心,因为这是一种不可逆转的破坏性过程。
然后你应该看到以下提示:
Enter passphrase (empty for no passphrase):
您可以选择在此输入一个安全的密语,强烈建议您这样做。密语可以为您的密钥增加额外的安全层,以防止未经授权的用户登录。
您应该随后看到以下输出:
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密钥的身份验证方式进行登录。
第二步 — 将公钥复制到您的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
你可能会看到以下信息:
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”并按下回车键继续。
接下来,该工具将会扫描您本地账户中我们之前创建的 id_rsa.pub 密钥。当它找到密钥时,会提示您输入远程用户账户的密码。
/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:
输入密码(出于安全考虑,您的输入不会显示)然后按回车键。工具将使用您提供的密码连接到远程主机上的账户。然后,它将把您的~/.ssh/id_rsa.pub密钥的内容复制到远程账户的~/.ssh/authorized_keys 文件中。
你应该看到以下输出结果:
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密钥已经上传到远程账户。你可以继续进行第三步。
使用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”
您可能会看到以下信息:
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
这意味着您的本地计算机无法识别远程主机。当您第一次连接到新的主机时会发生这种情况。请输入”是”并按回车键继续。
随后,你将被提示输入远程用户账号密码:
username@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
你将会看到密钥的内容,应该是类似这样的。
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_string替换为在本地系统上执行的cat ~/.ssh/id_rsa.pub命令的输出。它应该以ssh-rsa AAAA….开头。
最后,我们将确保“~/.ssh”目录和“authorized_keys”文件具有正确设置的权限。
- chmod -R go= ~/.ssh
这会递归地移除 ~/.ssh/ 目录下的所有“组”和“其他”权限。
如果您正在使用根帐户为用户帐户设置密钥,同样重要的是,.ssh目录属于用户而不是根目录。
- chown -R sammy:sammy ~/.ssh
在本教程中,我们的用户名为Sammy,但你应该将适当的用户名替换到上述命令中。
我们现在可以尝试使用密钥对进行与我们的Rocky Linux服务器的身份验证。
第三步 – 使用SSH密钥登录到您的Rocky Linux服务器
如果您已成功完成以上其中一项过程,现在您应该能够无需远程账户密码登录远程主机。
最初的过程与基于密码的认证相同。
- ssh username@remote_host
如果这是您第一次连接到此主机(如果您使用了上述的最后一种方法),您可能会看到类似这样的内容。
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
这意味着您的本地计算机无法识别远程主机。输入“是”然后按回车键继续。
如果您在第一步创建密钥对时没有提供密码短语,将立即登录。如果您提供了密码短语,现在将提示您输入密码。在验证后,应为您在Rocky Linux服务器上的配置帐户打开一个新的shell会话。
如果基于密钥的身份验证成功,继续学习如何进一步保护您的系统,通过禁用SSH服务器的基于密码的身份验证。
第四步-在您的服务器上禁用密码身份验证
如果你能够使用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基础指南。