介绍
SSH,或安全壳,是一种用于管理和与服务器通信的加密协议. 当您使用 Debian 服务器时,您很可能将大部分时间花在通过 SSH 连接到您的服务器的终端会话中。
在本指南中,我们将专注于为Debian 11安装设置SSH密钥。SSH密钥提供一个简单、安全的方式来登录您的服务器,并推荐给所有用户。
步骤1:创建 RSA 密钥对
第一步是在客户端机器(通常是您的计算机)上创建一个密钥对:
1[environment local]
2ssh-keygen
默认情况下,ssh-keygen 会创建一个 3072 位 RSA 密钥对,这对于大多数用例来说是足够安全的(您可以选择通过 `-b 4096' 旗帜创建一个更大的 4096 位密钥)。
输入命令后,你应该看到以下输出:
1[environment local]
2[secondary_label Output]
3Generating public/private rsa key pair.
4Enter file in which to save the key (/your_home/.ssh/id_rsa):
按 Enter 以将密钥对保存到您的主目录中的 .ssh/
子目录中,或指定替代路径。
如果您之前已经生成了一个 SSH 密钥对,您可能会看到以下提示:
1[environment local]
2[secondary_label Output]
3/home/your_home/.ssh/id_rsa already exists.
4Overwrite (y/n)?
<$>[警告] 警告: 如果您选择在磁盘上重写密钥,您将不能再使用以前的密钥进行身份验证。
然后你应该看到以下快速:
1[environment local]
2[secondary_label Output]
3Enter passphrase (empty for no passphrase):
在这里,您可选地输入安全密码,这是非常建议的。 密码添加了一个额外的安全层,以防止未经授权的用户登录。 有关安全性的更多信息,请参阅我们的教程 如何在 Linux 服务器上配置 SSH 基于密钥的身份验证。
然后你应该看到以下的输出:
1[environment local]
2[secondary_label Output]
3Your identification has been saved in /your_home/.ssh/id_rsa.
4Your public key has been saved in /your_home/.ssh/id_rsa.pub.
5The key fingerprint is:
6SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata
7The key's randomart image is:
8+---[RSA 3072]----+
9| oo .O^XB|
10| . +.BO%B|
11| . = .+B+o|
12| o o o . =.|
13| S . . =|
14| o.|
15| .o|
16| E o..|
17| . ..|
18+----[SHA256]-----+
您现在有可用于身份验证的公共和私钥,下一步是将公共密钥放置在您的服务器上,以便您可以使用基于 SSH 密钥的身份验证登录。
步骤 2 — 将公钥复制到 Debian 服务器
复制您的公共密钥到 Debian 主机的最快方法是使用一个名为ssh-copy-id
的实用程序. 由于其简单性,这种方法在可用的情况下非常建议。 如果您在客户端机上没有ssh-copy-id
,您可以使用本节提供的两种替代方法之一(使用基于密码的 SSH 复制或手动复制密钥)。
使用ssh-copy-id
复制公共密钥
「ssh-copy-id」工具默认包含在许多操作系统中,因此您可以在本地系统上使用它。
要使用该实用程序,您只需要指定您想要连接的远程主机和您有密码SSH访问权限的用户帐户。
语法是:
1ssh-copy-id username@remote_host
你可能会看到以下消息:
1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes
这意味着您的本地计算机无法识别远程主机,这将发生在您第一次连接到新主机时。
接下来,该实用程序将扫描您的本地帐户以获取我们之前创建的 id_rsa.pub
密钥.当它找到密钥时,它将提示您寻找远程用户帐户的密码:
1[environment local]
2[secondary_label Output]
3/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
4/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
5[email protected]'s password:
输入密码(您的输入不会出现在安全目的)并按ENTER
。 该实用程序将使用您提供的密码连接到远程主机上的帐户,然后将您的~/.ssh/id_rsa.pub
键的内容复制到远程帐户的~/.ssh
主目录中的文件中,名为authorized_keys
。
你应该看到以下结果:
1[environment local]
2[secondary_label Output]
3Number of key(s) added: 1
4
5Now try logging into the machine, with: "ssh '[email protected]'"
6and 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
目录存在并在我们正在使用的帐户下具有正确的权限。
然后,我们可以将我们输出的内容输出到该目录中的一个名为autorized_keys
的文件中,我们将使用>>
重定向符号来附加内容,而不是重写它,这将允许我们添加密钥而不会破坏之前添加的密钥。
整个命令看起来是这样的:
1[environment local]
2cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"
你可能会看到以下消息:
1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes
这意味着您的本地计算机无法识别远程主机,这将发生在您第一次连接到新主机时。
之后,您应该被要求输入远程用户帐户密码:
1[environment local]
2[secondary_label Output]
3[email protected]'s password:
输入密码后,你的 id_rsa.pub
密钥的内容将被复制到远程用户帐户的 authorized_keys
文件的末尾。
手动复制公共密钥
如果您没有基于密码的 SSH 访问到您的服务器,您将不得不手动完成上述过程。
我们将手动添加您的 id_rsa.pub
文件的内容到您的远程计算机上的 ~/.ssh/authorized_keys
文件。
要显示你的 id_rsa.pub
密钥的内容,请在本地计算机中输入:
1[environment local]
2cat ~/.ssh/id_rsa.pub
您将看到密钥的内容,该内容应该看起来像这样:
1[environment local]
2[secondary_label Output]
3ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test
使用您可用的任何方法访问您的远程主机。
一旦你在远程服务器上访问了你的帐户,你应该确保~/.ssh
目录存在,如果有必要,这个命令将创建目录,或者如果它已经存在的话,不要做任何事情:
1mkdir -p ~/.ssh
现在,您可以在该目录中创建或修改authorized_keys
文件. 您可以将您的id_rsa.pub
文件的内容添加到authorized_keys
文件的末尾,必要时使用以下命令创建它:
1echo public_key_string >> ~/.ssh/authorized_keys
在上述命令中,用您在本地系统上执行的cat ~/.ssh/id_rsa.pub
命令的输出代替public_key_string
。
最后,我们将确保 ~/.ssh
目录和 autorized_keys
文件具有相应的权限设置:
1chmod -R go= ~/.ssh
这会反复删除对 ~/.ssh/
目录的所有组
和其他
权限。
如果您使用root
帐户为用户帐户设置密钥,则重要的是~/.ssh
目录属于用户,而不是root
:
1chown -R sammy:sammy ~/.ssh
在本教程中,我们的用户名为sammy,但您应该在上面的命令中代替相应的用户名。
您现在可以尝试使用您的 Debian 服务器进行无密码身份验证。
步骤 3 — 使用 SSH 键对 Debian 服务器进行身份验证
如果您已成功完成上述程序之一,您应该能够登录远程主机 without 远程帐户的密码。
一般过程是相同的:
1[environment local]
2ssh username@remote_host
如果这是你第一次连接到这个主机(如果你使用了上面的最后一种方法),你可能会看到这样的东西:
1[environment local]
2[secondary_label Output]
3The authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
4ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
5Are you sure you want to continue connecting (yes/no)? yes
这意味着本地计算机无法识别远程主机,输入是
,然后按进入
继续。
如果您在创建密钥时没有提供私钥密码,您将立即登录。如果您在创建密钥时提供私钥密码,您将被要求现在输入密码(请注意,您的密钥打击不会出现在终端安全会话中)。
如果基于密钥的身份验证成功,请继续学习如何通过禁用密码身份验证来进一步保护您的系统。
步骤 4 – 在您的服务器上禁用密码身份验证
如果您能够在没有密码的情况下使用 SSH 登录帐户,则已成功配置 SSH 基于密钥的身份验证到您的帐户,但是,您的基于密码的身份验证机制仍然活跃,这意味着您的服务器仍然受到暴力攻击。
在完成本节中的步骤之前,请确保您已为本服务器上的 root 帐户配置了基于 SSH 密钥的身份验证,或者最好是为本服务器上的非 root 帐户配置了基于 SSH 密钥的身份验证,具有sudo
权限。
一旦您确认您的远程帐户具有管理权限,请使用 SSH 密钥登录您的远程服务器,无论是作为 root 或具有sudo
权限的帐户。
1sudo nano /etc/ssh/sshd_config
在文件中,搜索一个名为PasswordAuthentication
的指令。这可能会被评论。 删除评论,并将值设置为不
。 这将使您无法使用帐户密码登录通过SSH:
1[label /etc/ssh/sshd_config]
2...
3PasswordAuthentication no
4...
保存和关闭文件,当你完成时,按CTRL
+X
,然后Y
来确认保存文件,最后ENTER
来退出nano。
1sudo systemctl restart ssh
作为预防措施,打开一个新的终端窗口,并在关闭此会话之前测试 SSH 服务是否正常运作:
1[environment local]
2ssh username@remote_host
一旦您验证了 SSH 服务,您可以安全地关闭所有当前的服务器会话。
您的 Debian 服务器上的 SSH 示威器现在只响应 SSH 密钥。
结论
您现在应该在您的服务器上配置基于 SSH 密钥的身份验证,允许您在不提供帐户密码的情况下登录。
如果您想了解有关使用 SSH 的更多信息,请参阅我们的 SSH 基本指南。