如何在 Ubuntu 20.04 上设置 SSH 密钥

简介: SSH是一种加密协议,用于管理服务器并与服务器通信。使用 Ubuntu 服务器时,我们将大部分时间花在通过 SSH 连接到服务器的终端会话上。下来将重点关注为 Ubuntu 20.04 安装设置 SSH 密钥,SSH 密钥提供了一种安全的登录服务器的方式。

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站

如何在 Ubuntu 20.04 上设置 SSH 密钥

介绍

SSH是一种加密协议,用于管理服务器并与服务器通信。使用 Ubuntu 服务器时,我们将大部分时间花在通过 SSH 连接到服务器的终端会话上。

下来将重点关注为 Ubuntu 20.04 安装设置 SSH 密钥,SSH 密钥提供了一种安全的登录服务器的方式。

第 1 步 — 创建密钥对

第一步是在客户端计算机(通常是个人计算机)上创建密钥对:

ssh-keygen

默认情况下,最新版本ssh-keygen将创建一个 3072 位 RSA 密钥对,这对于大多数用例来说足够安全(也可以选择传入标志-b 4096来创建更大的 4096 位密钥)。

输入命令后,应该看到以下输出:

OutputGenerating 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)?

如果选择覆盖磁盘上的密钥,将无法再使用以前的密钥进行身份验证。选择“是”时要非常小心,因为这是一个无法逆转的破坏性过程。

然后应该看到以下提示:

OutputEnter 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-copy-id username@remote_host

会看到以下消息:

OutputThe 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继续。

接下来,该实用程序将扫描本地帐户以查找我们之前创建的密钥。当它找到密钥时,它会提示输入远程用户帐户的密码:

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``authorized_keys~/.ssh/id_rsa.pub文件中。

应该看到以下输出:

OutputNumber 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该目录中调用的文件中。我们将使用>>重定向符号附加内容而不是覆盖它。这将使我们能够添加密钥而不会破坏之前添加的密钥。

完整的命令如下所示:

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

会看到以下消息:

OutputThe 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继续。

之后,系统应该提示输入远程用户帐户密码:

Outputusername@203.0.113.1's password:

输入密码后,密钥内容将被复制到远程用户帐户的文件id_rsa.pub末尾。

手动复制公钥

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

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

cat ~/.ssh/id_rsa.pub

应如下所示:

Outputssh-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

最后,确保~/.ssh目录和authorized_keys文件具有适当的权限集:

chmod -R go= ~/.ssh

上面的命令会递归地删除该~/.ssh/目录的所有“组”和“其他”权限。

如果使用root帐户为用户帐户设置密钥,那么该~/.ssh目录属于用户而不是root也很重要:

chown -R sammy:sammy ~/.ssh

现在可以尝试使用 Ubuntu 服务器进行无密码身份验证。

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

开始登录:

ssh username@remote_host

如果第一次连接到该主机(如果使用了上面的最后一种方法),可能会看到如下内容:

OutputThe 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继续。

如果没有提供私钥密码,将立即登录。如果在创建密钥时为私钥提供了密码,系统将提示输入密码。身份验证后,应使用 Ubuntu 服务器上配置的帐户打开一个新的 shell 会话。

第 4 步 — 在服务器上禁用密码身份验证

在完成本步骤之前,请确保已为此服务器上的root帐户配置基于 SSH 密钥的身份验证,或者最好已为此服务器上的非 root 帐户配置基于 SSH 密钥的身份验证。具有权限的服务器sudo。此步骤将锁定基于密码的登录,因此确保我们仍然能够获得管理访问权限至关重要。否则,一首凉凉送给你~

确认远程帐户具有管理权限后,请使用 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 密钥的身份验证。基于密码的登录已被禁用。

目录
相关文章
|
3月前
|
Ubuntu 安全 网络安全
百度搜索:蓝易云【Ubuntu系统SSH服务端配置】
现在,你已经成功在Ubuntu系统上配置了SSH服务端。这将允许其他计算机通过SSH协议连接到你的Ubuntu系统,并进行远程管理和操作。请注意,远程访问有安全风险,建议在生产环境中采取必要的安全措施来保护系统。
40 3
|
3月前
|
Ubuntu 网络安全 数据安全/隐私保护
百度搜索:蓝易云【Ubuntu实现免密登录设置教程】
完成以上步骤后,你将可以在客户端无需输入密码即可登录到服务器。请确保公钥已经正确复制到服务器,并妥善保管私钥,以确保安全性。
24 0
|
3月前
|
Ubuntu 网络协议
百度搜索:蓝易云【ubuntu系统如何设置静态IP地址?】
现在,你已经成功在Ubuntu系统中设置了静态IP地址。系统将使用指定的静态IP地址进行网络连接。
31 0
|
3月前
|
Ubuntu Shell
百度搜索:蓝易云【Ubuntu系统如何设置开机自启动shell脚本?】
现在,你的Shell脚本将会在Ubuntu系统开机时自动执行。请确保脚本中的逻辑是正确的,以免对系统造成不必要的影响。
32 0
|
3月前
|
Ubuntu 网络协议 网络安全
如何在外SSH远程连接Ubuntu系统【无公网IP】
如何在外SSH远程连接Ubuntu系统【无公网IP】
66 0
|
1月前
|
编解码 Ubuntu 算法
Ubuntu桌面图标指南:一文了解如果设置ubuntu 软件图标
Ubuntu桌面图标指南:一文了解如果设置ubuntu 软件图标
49 0
|
3天前
|
Ubuntu 安全 网络协议
|
2月前
|
安全 网络协议 Linux
|
3月前
|
存储 Ubuntu 网络安全
百度搜索:蓝易云【Ubuntu14.04离线安装ssh所需安装包deb教程】
现在,你已经在Ubuntu 14.04离线机器上成功安装了SSH服务。注意,在离线安装过程中,可能需要手动处理依赖项问题。
37 0
|
3月前
|
Ubuntu Docker 容器
在 Docker 的 Ubuntu 容器中设置 NTP 和时区
在 Docker 的 Ubuntu 容器中设置 NTP 和时区
67 1