网站搜索

如何使用无密码 SSH 密钥登录远程 Ubuntu 20.04 服务器


对于远程拥有 Ubuntu 或其他 Linux 服务器(例如 Debian、CentOS 和 Fedora)的用户,以下是如何使用 SSH 密钥身份验证进行无密码登录的方法。

与用户密码登录相比,SSH 密钥身份验证更加安全,因为只有拥有密钥的人才允许连接,并且密钥通过不同的算法进行了很好的加密。它还使 SSH 连接变得简单,无需密码即可登录。

1.启用SSH服务(在服务器端进行):

如果您没有在远程服务器中启用 SSH 服务。您需要首先连接到服务器,然后运行命令来安装 openssh:

sudo apt install openssh-server

对于 CentOS 和 Fedora 服务器,请改用 sudo dnf install openssh-server 命令。

安装完成后,通过命令启用并启动服务:

sudo systemctl enable ssh && sudo systemctl start ssh

最后通过运行命令验证 SSH 服务状态:

sudo system status ssh

如果您看到该服务处于活动状态并正在运行,您可以在本地计算机上使用以下命令开始通过 SSH 远程连接服务器:

ssh user@server_ip

替换 user 和 server_ip。如果端口号不是默认的 22,请使用 -p port_number 指定端口号。

2.启用SSH密钥认证(在本地PC上运行命令):

身份验证密钥在本地计算机中生成。它们通常由私钥和公钥组成。通过将公钥上传到远程 Linux 服务器,您将能够在本地计算机上使用私钥进行 SSH 登录。

注意:本教程在 Ubuntu 本地计算机上进行了测试,但它应该适用于大多数 Linux,包括 Debian、Fedora、CentOS 和 Arch Linux。

1.安装OpenSSH客户端:

OpenSSH 客户端大多是开箱即用安装的。如果您没有,请在本地计算机上运行以下命令进行安装:

sudo apt install openssh-client

对于 CentOS 和 Fedora,请改用 sudo dnf install openssh openssh-clients 。

2.生成SSH密钥对:

ssh-keygen 命令允许通过 RSAECDSAED25519 算法生成 SSH 密钥对。虽然 RSA 得到广泛使用且得到最好的支持,但 ED25519 提供了更好的安全性和良好的性能。

a.) 首先,在本地计算机终端窗口中创建并导航到 .ssh 目录:

mkdir -p ~/.ssh && cd ~/.ssh

b.) 接下来,运行命令生成密钥对:

ssh-keygen -t ed25519 -f linode_ed25519 -C "root@linode"

在代码中,您可以将“ed25519”替换为您喜欢的加密算法。 “-f linode_ed25519”指定键名,“-C “root@linode””是可选注释。

c.) 出于安全考虑,强烈建议除您自己之外的其他用户设置无权限(甚至不可读):

chmod 600 ~/.ssh/linode_ed25519*

将“linode_ed25519”更改为您在上一步中设置的密钥名称。最后有一个星号“*”,因此它也适用于“linode_ed25519.pub”文件。

3. 将公钥上传到主机服务器(在本地PC上执行):

现在使用命令将公钥(在我的例子中为“linode_ed25519.pub”)从本地计算机上传到远程服务器:

cd ~/.ssh && ssh-copy-id -i linode_ed25519.pub user@server_ip

如果监听端口不是默认的22,不要记得添加'-p number'。并且您需要输入远程用户密码才能上传密钥。

之后,在本地计算机上再次尝试 SSH 登录,会要求输入您在 b 中设置的密钥密码。):

ssh user@server_ip

如果您选择取消,则会要求用户密码身份验证。

4. 启用无密码 SSH 密钥登录(在本地 PC 中执行):

您可以勾选“登录时自动解锁该密钥”,并在最后一张屏幕截图中仅输入一次密码。然而,某些桌面环境可能不提供这种友好的功能。因此,“ssh-agent”(OpenSSH 身份验证代理)可以为您完成这项工作。

首先通过 shell 命令运行“ssh-agent”:

eval 'ssh-agent'

接下来,将 SSH 密钥添加到代理:

ssh-add linode_ed25519

之后,SSH命令将登录,而无需输入身份验证密钥密码。

5.禁用SSH用户密码登录(在服务器端执行):

成功设置密钥认证后,您可以禁用用户密码登录,这样其他人就无法访问服务器了!

首先,连接到远程服务器并运行命令来编辑 ssh 守护程序配置文件:

sudo nano /etc/ssh/sshd_config

接下来,取消注释“#PasswordAuthentication yes”行并将其值设置为 no,因此它将是:

密码验证否

然后按 Ctrl+X,输入 y 并按 Enter 键保存文件。

最后通过重新加载 SSH

sudo systemctl reload ssh

命令并享受!