如何在 Ubuntu 20.04 上安装 SSH 密钥
如何在 Ubuntu 20.04 上安装 SSH 密钥

如何在 Ubuntu 20.04 上安装 SSH 密钥

0 股票
0
0
0
0

如何在 Ubuntu 20.04 上安装 SSH 密钥

介绍

SSH(安全外壳协议)是一种用于管理和与服务器通信的加密协议。在使用 Ubuntu 服务器时,您很可能大部分时间都会在通过 SSH 连接到服务器的终端会话中度过。请继续关注我们,了解如何在 Ubuntu 20.04 上安装 SSH 密钥。.

在此 帮助本文将重点介绍如何在 Ubuntu 20.04 系统中设置 SSH 密钥。SSH 密钥提供了一种安全的服务器登录方式,建议所有用户都使用。.

创建 DigitalOcean Droplet 允许您立即添加计算机的 SSH 密钥,以便您可以私密且安全地连接。.

步骤 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 密钥的身份验证的教程。.

然后您应该会看到类似以下内容的输出:

OutputYour 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:/hk7MJ5n5aiqdfTVUZr+2Qt+qCiS7BIm5Iv0dxrc3ks user@host
The key's randomart image is:
+---[RSA 3072]----+
|                .|
|               + |
|              +  |
| .           o . |
|o       S   . o  |
| + o. .oo. ..  .o|
|o = oooooEo+ ...o|
|.. o *o+=.*+o....|
|    =+=ooB=o.... |
+----[SHA256]-----+

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

步骤 2 – 将公钥复制到 Ubuntu 服务器

在 Ubuntu 主机上复制公钥最快的方法是使用名为 ssh-copy-id 的工具。由于其操作简便,如果客户端计算机上安装了该工具,强烈建议使用此方法。如果客户端计算机上没有 ssh-copy-id,您可以使用本节中提供的两种替代方法之一(通过基于密码的 SSH 复制或手动复制密钥)。.

使用 ssh-copy-id 复制公钥

许多操作系统默认都包含 ssh-copy-id 工具,因此您的本地系统可能已经安装了该工具。要使此方法生效,您必须已经拥有基于密码的 SSH 访问权限来访问您的服务器。.

要使用此工具,您需要指定要连接的远程主机以及您拥有基于密码的 SSH 访问权限的用户帐户。您的 SSH 公钥将被复制到此帐户。.

像这样:

$ 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

这意味着您的本地计算机无法识别远程主机。这是您首次连接到新主机。请输入“yes”并按回车键继续。.

接下来,该工具将扫描您的本地帐户,查找我们之前创建的 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
[email protected]'s password:

输入密码(出于安全考虑,您输入的内容不会显示),然后按回车键。该工具将使用您提供的密码连接到远程主机上的帐户。然后,它会将您的 ssh/id_rsa.pub./~ 密钥的内容复制到远程帐户 ssh./~ 主目录中名为 authorized_keys 的文件中。.

您应该看到以下输出:

Output
Number of key(s) added: 1

Now try logging into the machine, with: "ssh '[email protected]'"
and 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./~ 目录存在,并且具有我们正在使用的帐户的正确权限。.

然后,我们可以将输入的内容输出到此目录下的名为 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"

您可能会看到以下消息:

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

这意味着您的本地计算机无法识别远程主机。这是您首次连接到新主机。请键入“是”并按回车键继续。.

之后,系统会提示您输入远程帐户密码:

Output
[email protected]'s password:

输入密码后,您的 id_rsa.pub 密钥的内容将被复制到远程帐户的 authorized_keys 文件末尾。如果成功,请继续执行步骤 3。.

手动复制公钥

如果您没有基于密码的 SSH 访问权限,则需要手动完成上述过程。.

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

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

# cat ~/.ssh/id_rsa.pub

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

Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCqql6MzstZYh1TmWWv11q5O3pISj2ZFl9HgH1JLknLLx44+tXfJ7mIrKNxOOwxIxvcBF8PXSYvobFYEZjGIVCEAjrUzLiIxbyCoxVyle7Q+bqgZ8SeeM8wzytsY+dVGcBxF6N4JS+zVk5eMcV385gG3Y6ON3EG112n6d+SMXY0OEBIcO6x+PnUSGHrSgpBgX7Ks1r7xqFa7heJLLt2wWwkARptX7udSq05paBhcpB0pHtA1Rfz3K2B+ZVIpSDfki9UVKzT8JUmwW6NNzSgxUfQHGwnW7kj4jp4AT0VZk3ADw497M2G/12N0PPB5CnhHf7ovgy6nL1ikrygTKRFmNZISvAcywB9GVqNAVE+ZHDSCuURNsAInVzgYo9xgJDW8wUw2o8U77+xiFxgI5QSZX3Iq7YLMgeksaO4rBJEa54k8m5wEiEE1nUhLuJ0X/vh2xPff6SQ1BL/zkOhvJCACK6Vb15mDOeCSq54Cr7kvS46itMosi/uS66+PujOO+xt/2FWYepz6ZlN70bRly57Q06J+ZJoc9FfBCbCyYH7U/ASsmY095ywPsBo1XQ9PqhnN1/YOorJ068foQDNVpm146mUpILVxmq41Cj55YKHEazXGsdBIbXWhcrRf4G2fJLRcGUr9q8/lERo9oxRm5JFX6TCmj6kmiFqv+Ow9gI0x8GvaQ== demo@test

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

获得远程服务器帐户访问权限后,您需要确保 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./~ 目录的所有“组”和“其他”权限。.

如果您使用 root 帐户为用户帐户设置密钥,那么 ssh./~ 目录的所有者必须是该用户而不是 root 用户:

chown -R sammy:sammy ~/.ssh

在本教程中,我们的用户名是 sammy,但您应该在上面的命令中替换为相应的用户名。.

现在我们可以使用 Ubuntu 服务器进行无密码身份验证了。.

步骤 3 – 使用 SSH 密钥对 Ubuntu 服务器进行身份验证

如果您已成功完成上述步骤之一,则无需提供远程帐户密码即可登录到远程主机。.

基本流程相同:

$ 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

这意味着您的本地计算机无法识别远程主机。请键入“yes”,然后按回车键继续。.

如果您未为私钥设置密码,系统将立即登录。如果您在创建私钥时设置了密码,系统会提示您输入密码(请注意,出于安全考虑,您的按键操作不会显示在终端会话中)。身份验证成功后,系统将使用在 Ubuntu 服务器上配置的帐户为您打开一个新的 shell 会话。.

如果基于密钥的身份验证成功,请继续学习如何通过禁用密码身份验证来进一步保护您的系统。.

步骤 4 – 禁用服务器上的密码验证

如果您无需密码即可使用 SSH 登录帐户,则说明您已成功配置了基于 SSH 密钥的身份验证。但是,您的基于密码的身份验证机制仍然启用,这意味着您的服务器仍然容易受到暴力破解攻击。.

在完成本节中的步骤之前,请确保您已为该服务器上的 root 帐户配置了基于 SSH 密钥的身份验证,或者最好为该服务器上具有 sudo 权限的非 root 帐户配置了基于 SSH 密钥的身份验证。此步骤会禁用基于密码的登录,因此务必确保您仍然拥有管理访问权限。.

确认远程账户拥有管理员权限后,使用 SSH 密钥以 root 用户或具有 sudo 权限的账户登录远程服务器。然后,打开 SSH 守护进程配置文件:

$ sudo nano /etc/ssh/sshd_config

在文件中,找到名为 PasswordAuthentication 的指令。该行可能被注释掉了,行首有 #。取消注释的方法是删除 # 并将值设置为 no。这将禁用您使用帐户密码通过 SSH 登录的功能。

/etc/ssh/sshd_config


. . .
PasswordAuthentication no
. . .

完成后,按 CTRL+X 保存并关闭文件,然后按 Y 确认保存,最后按 ENTER 退出 nano 编辑器。要使这些更改生效,我们需要重启 sshd 服务:

$ sudo systemctl restart ssh

为安全起见,请打开一个新的终端窗口,在关闭当前会话之前测试 SSH 服务是否正常工作:

# ssh username@remote_host

确认 SSH 服务运行正常后,即可安全地关闭所有当前服务器会话。.

您的 Ubuntu 服务器上的 SSH 服务现在仅响应基于 SSH 密钥的身份验证。基于密码的登录已被禁用。.

结果

现在您需要在服务器上配置基于 SSH 密钥的身份验证,以便无需提供帐户密码即可登录。.

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

您可能也喜欢

云空间

什么是云空间?本文将介绍2020年最佳云存储空间。随着云空间使用量的不断增长,本文将探讨……