如何在 Ubuntu 20.04 上添加 SSH 密钥

使用 SSH 密钥设置安全的无密码登录到远程 Ubuntu 服务器

SSH 是一种安全的客户端-服务器网络协议,可帮助客户端计算机连接到远程服务器并与之通信。 SSH 连接确保在终端中键入的命令通过加密通道发送到远程服务器。

有两种类型的身份验证机制用于连接到远程服务器,基于密码的身份验证(容易受到暴力攻击)和基于 SSH 密钥的身份验证(非常安全)。

在基于 SSH 密钥的认证中,在客户端计算机上生成一个密钥对,称为公钥和私钥。此公钥的副本在远程服务器上可用。当客户端向服务器发送连接请求时,服务器会生成一个随机字符串并使用公钥对其进行加密。该字符串只能使用客户端计算机上可用的私钥解密。此方法确保服务器只能由包含私钥的客户端访问。

在本指南中,我们将看到如何在 Ubuntu 20.04 LTS 服务器上设置 SSH 密钥。

查看您的计算机上是否有任何现有的 SSH 密钥

要检查计算机上是否已存在 SSH 密钥对,请在终端中键入此命令。

ls -l ~/.ssh/id_*.pub

如果上面的命令返回 无此文件或目录 或者 未找到匹配项,则表示 SSH 密钥对不存在。

如果您有现有的 SSH 密钥对,那么您可以使用相同的密钥对访问两个远程服务器,或者您也可以创建具有不同名称的不同密钥对。让我们继续下一步,看看如何为这两种情况生成 SSH 密钥。

在客户端计算机上创建 SSH 密钥

要在您的计算机上生成新的 SSH 密钥对,请键入如下所示的命令。

ssh-keygen

默认情况下,SSH 密钥为 2048 位。为了更好的安全性,如果要生成更高位的 SSH 密钥,则使用以下命令。

ssh-keygen -b 4096

如果该命令运行成功,则屏幕上将提示以下消息。

生成公钥/私钥 rsa 密钥对。输入保存密钥的文件 (/home/harshit/.ssh/id_rsa):

现在,如果您的计算机上没有任何现有的 SSH 密钥对,那么只需按 进入,但如果您有现有的 SSH 密钥,则使用不同的文件名保存该密钥,如下所示。

输入保存密钥的文件 (/home/your_name/.ssh/id_rsa):/home/your_name/.ssh/id_rsa_xxx

更换 xxx 在文件名的末尾加上一个合适的名字,如下图所示,然后按 进入.

输入保存密钥的文件 (/home/your_name/.ssh/id_rsa):/home/your_name/.ssh/id_rsa_client_1

下一个提示将要求您输入任意长度的密码,这将确保您设备的两级安全。

Enter passphrase (empty for no passphrase): 再次输入相同的密码:

输入此密码将确保即使有人可以访问您的私钥,如果没有此密码,他将无法访问您的远程服务器。

整个过程完成后,屏幕上会显示以下消息。

ssh-keygen -b 4096 整个 SSH 密钥生成过程完成后,屏幕上会显示以下消息。

SSH 密钥已在您的系统上生成。现在是时候在远程服务器上复制公钥了。

将公钥复制到远程 Ubuntu 服务器

将公钥复制到远程服务器的最简单快捷的方法是使用 ssh 复制 ID 公用事业。但是,如果由于某种原因此实用程序在您的计算机上不可用,那么您也可以使用本节中提供的其他方法。

使用 ssh-copy-id 实用程序

ssh 复制 ID 实用程序默认在您的 Ubuntu 机器上可用,它将公钥从您的设备复制到远程 Ubuntu 机器的适当目录。

要复制公共 ssh 密钥,只需在终端中键入命令,如下所示。

ssh-copy-id 用户名@主机名

更换 用户名主机名 在上面的命令中使用您的服务器的用户名和主机名。

如果您是第一次连接到您的主机,以下消息将出现在您的终端上,键入 是的 并按下 进入.

无法确定主机“172.105.XX.XX (172.105.XX.XX)”的真实性。 ECDSA 密钥指纹为 xx:xx:xx:xx:77:fe:73:xx:xx:55:00:ad:d6:xx:xx:xx。您确定要继续连接吗(是/否)? 是的

现在 ssh 复制 ID 实用程序将扫描具有名称的文件 id_rsa.pub 其中包含公共 SSH 密钥。扫描过程完成后,它会提示您输入远程服务器的密码,如下所示。输入密码并点击 进入.

/usr/bin/ssh-copy-id: INFO: 尝试使用新密钥登录,过滤掉任何已经安装的 /usr/bin/ssh-copy-id: INFO: 1 key(s) ) 仍然需要安装 -- 如果现在提示您安装新密钥 [email protected] 的密码:

添加密钥后,以下消息将作为输出显示在您的终端上。

添加的密钥数量:1 现在尝试登录机器,使用:“ssh '[email protected]'”并检查以确保只添加了您想要的密钥。

如果您的客户端计算机上有多个 SSH 密钥,则要将适当的公钥复制到远程计算机,请键入如下所示的模式中的命令。

ssh-copy-id -i id_rsa_xxx.pub username@host

💡小贴士

在终端中输入时,不要忘记将 .pub 放在文件名的末尾。

通过管道方式复制公钥

如果在终端中键入以下命令 ssh 复制 ID 实用程序不可用。这个命令可能看起来有点长,但它工作得很好。

cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && touch ~/.ssh/authorized_keys && chmod -R go= ~/.ssh && cat >> ~/.ssh/authorized_keys"

代替 远程用户名服务器的IP地址 使用您的用户名和 IP 地址。

如果您的计算机上有多个 SSH 密钥可用,请替换 id_rsa.pub 使用您选择的公共 SSH 密钥文件。例如, id_rsa_client_1.pub.

出现提示时输入远程用户密码并点击 进入.

[email protected] 的密码:

输入密码后, id_rsa.pub 文件将被复制到 授权密钥 远程服务器的文件。

手动复制公钥

当您无法通过密码验证访问远程系统时,请使用此方法。

打开 id_rsa.pub 文件使用 终端中的命令。您也可以从文本编辑器中打开它,目的只是复制文件的内容。

cat ~/.ssh/id_rsa.pub

文件内容如下所示。

SSH-RSA AAAAB3NzaC1yc2EAAAADAQABAAABAQComjFtuHvHQ67uf3RXg2wgK4EtxBvBvLCtlc4chG + nJ1cbuJjJ6G8az4xsRN1Q7hrV4dYR81Tk3gRApiMdGcMvInU3Vb7Wq3nh9GS4xnLRH1wvb149wogum2MycIES69Xh0cib + VvJyZ + dGO8zRNT64 + SvfiecRV0llnBGWDRqrIGtMHJkKz7VDKuSyzDit / Ck1NFXxC6Plw3cEMOhWHycm8bnSHSoVpr95ySxxnokX4 / 9iAlvOovxTpMpmDaDvuHKgHxcsOv9Q4sz // 6HY / 65 + qqmiuLyuIQXjDiiYTjHTx + VNi6S0iMLoN6XgDLp0MfG6kLvZ0Z + csqdvIDQfMuH your_name @ your_PC

现在,登录到您的远程服务器并使用下面显示的命令粘贴复制的内容。更换 以上_字符串 与复制的内容。

echo above_string >> ~/.ssh/authorized_keys

配置多个 SSH 密钥(可选)

此步骤适用于在其客户端计算机上设置多个 SSH 密钥的人员。如果您只有一个 SSH 密钥设置,请跳过此部分。

要管理多个 SSH 密钥,我们现在将创建一个 配置 里面的文件 .ssh 目录使用如下所示的命令。

cd ~/.ssh vim 配置

类型 一世 进入命令模式并输入多个主机的详细信息,如下例所示:

Host remote-ubuntu-server HostName 172.105.XX.XX User root IdentityFile ~/.ssh/id_rsa_client_1 Host remote-ubuntu-server HostName 172.106.XX.XX User root IdentityFile ~/.ssh/id_rsa_client_2

同样,键入其他远程服务器及其密钥的详细信息。该过程完成后按 退出:wq 保存并退出。

现在,对于客户端计算机上具有单个或多个 SSH 密钥的后续过程是相同的。

使用 SSH 密钥登录到您的远程服务器

复制公钥的过程完成后,通过键入如下所示的命令登录到远程服务器。

ssh 远程用户名@server_ip_address

如果您在生成密钥对时提供了密码短语,则会提示您输入密码。身份验证过程完成后,将打开一个新会话。

您现在已经在远程服务器上成功配置了基于 SSH 密钥的身份验证。但是基于密码的身份验证在您的服务器上仍然处于活动状态,这意味着您的远程服务器仍然容易受到暴力攻击。

所以现在我们将从我们的远程服务器完全禁用基于密码的登录机制。

禁用基于密码的登录机制

在进行任何更改之前,请确保远程帐户的 root 用户或任何启用了 sudo 的用户可以使用基于 SSH 密钥的身份验证系统访问您的服务器。此步骤将完全锁定或禁用基于密码的登录,因此至关重要的是至少有一个用户 root 权限可以通过 SSH 密钥访问服务器。

登录到您的远程 Ubuntu 服务器并键入如下所示的命令。

须藤vim /etc/ssh/sshd_config
  • 退出, / 并输入“PasswordAuthentication”并点击 进入.
  • 现在按 一世 并将“PasswordAuthentication yes”的值更改为“PasswordAuthentication no”。
  • 退出 并重复上述过程以找到“ChallengeResponseAuthentication”、“UsePAM”,并将它们的值更改为 以及。
PasswordAuthentication 无 ChallengeResponseAuthentication 无 UsePAM 无

一旦所有值都设置为 , 按 退出, 类型 :wq 并击中 进入.

要激活所有更改,请重新启动 ssh 使用以下命令提供服务。

须藤 systemctl 重启 ssh

现在在您的计算机上打开一个新的终端窗口,并在关闭当前会话之前验证您的 SSH 密钥身份验证是否正常工作。

验证过程完成后,关闭所有正在运行的会话。

我们现在已经在我们的 Ubuntu 20.04 服务器上成功配置了基于 SSH 密钥的身份验证。现在没有人可以使用基于密码的登录机制登录到您的服务器。