使用 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 密钥已在您的系统上生成。现在是时候在远程服务器上复制公钥了。
将公钥复制到远程 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 密钥的身份验证。现在没有人可以使用基于密码的登录机制登录到您的服务器。