Rocky Linux 9 SSH密钥设置教程:安全高效远程连接指南
SSH密钥设置:Rocky Linux 9服务器安全登录指南(第一部分)
SSH,即安全外壳协议(Secure Shell Protocol),是一种用于管理和与服务器进行加密通信的关键协议。在使用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 (/您的主目录/.ssh/id_rsa):
按下回车键,将密钥对保存到主目录下的 .ssh/
子目录中,或者您可以指定其他路径。
如果您之前已经生成过SSH密钥对,可能会看到以下提示:
输出
/home/您的主目录/.ssh/id_rsa already exists.
Overwrite (y/n)?
如果您选择覆盖现有密钥,之前的密钥将无法用于身份验证。请在选择“是”时务必谨慎,因为这是一个不可逆的破坏性操作。
接下来,您会看到以下提示:
输出
Enter passphrase (empty for no passphrase):
您可以选择在此处输入一个安全的密语(passphrase),强烈建议您这样做。密语能为您的密钥增加额外的安全层,有效防止未经授权的用户登录。
随后,您将看到以下输出:
输出
Your identification has been saved in /您的主目录/.ssh/id_rsa.
Your public key has been saved in /您的主目录/.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 用户名@远程主机
您可能会看到以下信息:
输出
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
用户名@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 '用户名@203.0.113.1'"
and check to make sure that only the key(s) you wanted were added.
至此,您的 id_rsa.pub
密钥已成功上传到远程账户。您可以继续进行第三步。
这是文章《如何在Rocky Linux 9上设置SSH密钥》的第2部分(共3部分)。
如果您没有ssh-copy-id
可用,但您有基于密码的SSH访问服务器上的账户,您可以使用更传统的SSH方法上传您的密钥。
我们可以通过使用“cat
”命令读取本地计算机上公共SSH密钥的内容,并将其通过SSH连接传输到远程服务器来完成此操作。
另一方面,我们可以确保~/.ssh
目录存在且在我们使用的账户下具有正确的权限。
然后,我们可以将输送过来的内容输出到一个名为authorized_keys
的文件中。我们将使用>>
重定向符号来追加内容,而不是覆盖它。这样可以在不破坏以前添加的密钥的情况下添加新的密钥。
完整命令如下:
- cat ~/.ssh/id_rsa.pub | ssh 用户名@远程主机 “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
这意味着您的本地计算机无法识别远程主机。当您第一次连接到新的主机时会发生这种情况。请输入“是
”并按回车键继续。
随后,您将被提示输入远程用户账户密码:
用户名@203.0.113.1‘s password:
如果成功输入密码,id_rsa.pub
密钥的内容将会被复制到远程用户账户的authorized_keys
文件末尾。如果成功,请继续进行第三步。
手动复制公钥(如果您没有可用的基于密码的SSH访问服务器)
如果您没有可用的基于密码的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 公钥字符串 >> ~/.ssh/authorized_keys
在上述命令中,将公钥字符串
替换为在本地系统上执行的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服务器
这是文章《如何在Rocky Linux 9上设置SSH密钥》的第3部分(共3部分)。
如果您已成功完成以上任一过程,现在您应该能够无需远程账户密码即可登录远程主机。
最初的过程与基于密码的认证相同。
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
这意味着您的本地计算机无法识别远程主机。输入“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登录。
/etc/ssh/sshd_config 是SSH守护进程的配置文件。
...
PasswordAuthentication no
...
完成更改后,按ESC
,然后输入:wq
以将更改写入文件并退出。要实际实施这些更改,我们需要重新启动sshd服务。
sudo systemctl restart sshd
为了预防起见,在关闭当前会话之前,请打开一个新的终端窗口并测试一下SSH服务是否正常工作。
ssh username@remote_host
一旦您确认您的SSH服务仍在正常运行中,您可以安全地关闭所有当前的服务器会话。
您的Rocky Linux服务器上的SSH守护进程现在仅响应SSH密钥,密码验证已成功禁用。
结论
现在您应该已经将基于SSH密钥的身份验证配置在您的服务器上了,允许您无需提供账户密码即可登录。
如果您想要了解更多关于使用SSH的内容,不妨参考一下我们的SSH基础指南。