如何在Debian 11上设置SSH密钥

介紹

SSH,即安全外殼協議,是一種用於管理和與伺服器通信的加密協議。在使用 Debian 伺服器時,您很可能會在通過 SSH 連接到伺服器的終端會話中度過大部分時間。

在本指南中,我們將專注於為純 Debian 11 安裝設置 SSH 金鑰。 SSH 金鑰提供了一種簡單、安全的登錄方式,建議所有使用者使用。

步驟 1 —— 建立 RSA 金鑰對

第一步是在客戶機上(通常是您的計算機)創建一對金鑰:

  1. ssh-keygen

默認情況下,ssh-keygen將創建一對 3072 位的 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):

在这里,您可以选择输入一个安全的口令,这是强烈建议的。口令会添加额外的安全层,防止未经授权的用户登录。要了解更多关于安全性的信息,请参阅我们的教程:如何在Linux服务器上配置SSH基于密钥的身份验证

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

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: SHA256:5E2BtTN9FHPBNoRXAB/EdjtHNYOHzTBzG5qUv7S3hyM root@debian-suricata The key's randomart image is: +---[RSA 3072]----+ | oo .O^XB| | . +.BO%B| | . = .+B+o| | o o o . =.| | S . . =| | o.| | .o| | E o..| | . ..| +----[SHA256]-----+

现在,您有一个可以用来进行身份验证的公钥和私钥。下一步是将公钥放在服务器上,以便您可以使用基于SSH密钥的身份验证进行登录。

步骤2 — 将公钥复制到Debian服务器

将您的公钥复制到Debian主机的最快方法是使用一个名为ssh-copy-id的实用程序。由于其简单性,如果可用,强烈推荐使用此方法。如果您的客户机上没有ssh-copy-id,您可以使用本节提供的两种备用方法之一(通过基于密码的SSH复制,或手动复制密钥)。

使用ssh-copy-id复制公钥

ssh-copy-id工具通常默认包含在许多操作系统中,因此您可能已经在本地系统上可用。要使此方法起作用,您必须已经具有基于密码的SSH访问权限到您的服务器。

要使用该实用程序,您只需要指定要连接的远程主机和您具有密码SSH访问权限的用户帐户。这是您的公共SSH密钥将要复制到的帐户。

语法如下:

  1. 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

这意味着您的本地计算机无法识别远程主机。这将在您首次连接到新主机时发生。 输入“是”并按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金鑰已上傳至遠端帳戶。您可以繼續進入第三步

使用 SSH 複製公鑰

如果您沒有ssh-copy-id可用,但您有基於密碼的 SSH 存取權限到您伺服器上的帳戶,您可以使用傳統的 SSH 方法上傳您的金鑰。

我們可以使用cat命令讀取本地電腦上的公用 SSH 金鑰的內容,並將其通過 SSH 連接傳送到遠端伺服器。

另一方面,我們可以確保~/.ssh目錄存在並且在我們正在使用的帳戶下具有正確的權限。

然後,我們可以將我們傳送過來的內容輸出到此目錄中名為authorized_keys的文件中。我們將使用>>重定向符號來追加內容,而不是覆蓋它。這將使我們能夠添加金鑰而不會破壞先前添加的金鑰。

完整的命令如下:

  1. 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文件的末尾。如果成功,继续第三步

手动复制公钥

如果您的服务器没有基于密码的SSH访问权限,则必须手动完成上述过程。

我们将手动将您的id_rsa.pub文件的内容追加到远程机器上的~/.ssh/authorized_keys文件中。

要显示您的id_rsa.pub密钥的内容,请在本地计算机上键入以下内容:

  1. cat ~/.ssh/id_rsa.pub

您将看到密钥的内容,应该类似于这样:

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDgkLJ8d2gGEJCN7xdyVaDqk8qgeZqQ0MlfoPK3TzWI5dkG0WiZ16jrkiW/h6lhO9K1w89VDMnmNN9ULOWHrZMNs//Qyv/oN+FLIgK2CkKXRxTmbh/ZGnqOm3Zo2eU+QAmjb8hSsstQ3DiuGu8tbiWmsa3k3jKbWNWpXqY3Q88t+bM1DZrHwYzaIZ1BSA1ghqHCvIZqeP9IUL2l2DUfSCT9LXJEgMQhgjakJnzEGPgd5VHMR32rVrbIbbDzlyyoZ7SpCe5y0vYvbV2JKWI/8SEOmwehEHJ9RBZmciwc+1sdEcAJVMDujb9p5rX4hyvFpG0KGhZesB+/s7PdOa8zlIg4TZhXUHl4t1jpPC83Y9KEwS/Ni4dhaxlnr3T6l5hUX2cD+eWl1vVpogBqKNGBMrVR4dWs3Z4BVUf9exqTRRYOfgo0UckULqW5pmLW07JUuGo1kpFAxpDBPFWoPsg08CGRdEUS7ScRnMK1KdcH54kUZr0O88SZOsv9Zily/A5GyNM= demo@test

使用您可用的任何方法访问您的远程主机。

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

  1. mkdir -p ~/.ssh

現在,您可以在此目錄中創建或修改authorized_keys文件。您可以將您的id_rsa.pub文件的內容添加到authorized_keys文件的末尾,如果需要的話,使用以下命令:

  1. echo public_key_string >> ~/.ssh/authorized_keys

在上述命令中,將public_key_string替換為您在本地系統上執行的cat ~/.ssh/id_rsa.pub命令的輸出。它應該以ssh-rsa AAAA...開頭。

最後,我們將確保~/.ssh目錄和authorized_keys文件設置了適當的權限:

  1. chmod -R go= ~/.ssh

這將遞歸地刪除~/.ssh/目錄的所有“組”和“其他”權限。

如果您正在使用root帳戶為用戶帳戶設置密鑰,則還需要確保~/.ssh目錄屬於用戶而不是root

  1. chown -R sammy:sammy ~/.ssh

在本教程中,我們的用戶名稱為sammy,但您應將適當的用戶名稱替換為上述命令。

您現在可以嘗試使用SSH密鑰進行無密碼身份驗證到Debian服務器。

步驟3 — 使用SSH密鑰對Debian服務器進行身份驗證

如果您已成功完成上述程序之一,您應該能夠在不输入遠程帳戶密碼的情况下登录到遠程主機。

一般流程是相同的:

  1. 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

這意味著您的本地計算機不識別遠程主機。輸入“是”,然後按 ENTER 鍵繼續。

如果您在創建密鑰時未提供私鑰的密碼,您將立即登录。如果您在創建密鑰時提供了私鑰的密碼,您現在將被提示輸入它(請注意,出於安全考慮,您的按鍵不會在終端會話中顯示)。身份驗證後,一個新的 shell 會話將為您在 Debian 伺服器上配置的帳戶打開。

如果基於密鑰的身份驗證成功,請繼續學習如何進一步保護您的系統,禁用密碼身份驗證。

步驟 4 — 在您的伺服器上禁用密碼身份驗證

如果您能夠使用 SSH 登錄您的帳戶而無需密碼,則您已成功將基於 SSH 密鑰的身份驗證配置到您的帳戶。然而,您的基於密碼的身份驗證機制仍然是活動的,這意味著您的伺服器仍然容易受到暴力攻擊的影響。

在完成本部分的步驟之前,請確保您在此伺服器上已配置了基於SSH金鑰的驗證,可以用於root帳戶,或更好的是,您已為此伺服器上具有sudo權限的非root帳戶配置了基於SSH金鑰的驗證。這一步將鎖定基於密碼的登錄,因此確保您仍然能夠獲得管理訪問至關重要。

確認您的遠程帳戶具有管理特權後,使用SSH金鑰登錄到您的遠程伺服器,可以是root,也可以是帶有sudo特權的帳戶。然後,打開SSH守護進程的配置文件:

  1. sudo nano /etc/ssh/sshd_config

在文件內部,搜索一個名為PasswordAuthentication的指令。這可能被註釋掉。取消註釋並將值設置為“no”。這將禁用您使用帳戶密碼通過SSH登錄的能力:

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

完成後,保存並關閉文件,按CTRL + X,然後按Y確認保存文件,最後按ENTER退出nano。要實際應用這些更改,我們需要重新啟動sshd服務:

  1. sudo systemctl restart ssh

作為預防措施,在開啟一個新的終端窗口之後,測試SSH服務是否正常運行,然後再關閉此會話:

  1. ssh username@remote_host

一旦驗證了您的SSH服務,您可以安全地關閉所有當前的伺服器會話。

您Debian伺服器上的SSH守護進程現在僅響應SSH金鑰。已成功禁用了基於密碼的身份驗證。

結論

您現在應該已經在您的伺服器上配置了基於SSH密鑰的身份驗證,允許您無需提供帳戶密碼即可登錄。

如果您想了解更多有關使用SSH的信息,請查看我們的SSH基本指南

Source:
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys-on-debian-11