在 Ubuntu 上设置无密码 SSH 登录的 2 个简单步骤

本教程介绍了如何设置 无密码SSH登录 在 Ubuntu 桌面上。 基本上有两种使用 OpenSSH 服务器验证用户登录的方法: 密码认证公钥认证. 后者也被称为 无密码SSH登录 因为您不需要输入密码。

设置无密码 SSH 登录的 2 个简单步骤

第 1 步:在您的 Ubuntu 桌面上生成公共/私人密钥对

在您的 Ubuntu 桌面(不是您的服务器)上,在终端窗口中输入以下命令。

ssh-keygen -t rsa -b 4096

在哪里:

  • -t 代表 type. 上面的命令生成一个 RSA 类型的密钥对。 RSA 是默认类型。
  • -b 代表 bits. 默认情况下,密钥长度为 3072 位。 我们使用 4096 位密钥以提高安全性。

当询问要保存密钥的文件时,您只需按 Enter 使用默认文件。 接下来,输入至少 20 个字符长的好密码。 密码短语用于加密私钥。

  • 私钥(您的身份证明)将保存在 .ssh/id_rsa 主目录下的文件。
  • 公钥将保存在 .ssh/id_rsa.pub 文件。

从 randomart 图像中我们可以看到密钥的长度(RSA 4096)。 现在运行以下命令。

file ~/.ssh/id_rsa

您应该看到以下输出:

/home/username/.ssh/id_rsa: OpenSSH private key

如果您看到“没有此类文件或目录”错误,则表示未创建 SSH 密钥对。 跑过 ssh-keygen -t rsa -b 4096 命令再次创建它。

第 2 步:将您的公钥上传到远程 Linux 服务器

暗示: 远程服务器可以运行任何Linux发行版:Debian、Ubuntu、RHEL、CentOS等等,只要运行OpenSSH服务器,就可以使用以下方法。

这可以很容易地完成 ssh-copy-id 命令,随附 openssh-client 包裹。

ssh-copy-id remote-user@server-ip

Enter 远程用户的密码。

公钥将存储在 .ssh/authorized_keys 远程用户主目录下的文件。 现在通过 SSH 连接到远程服务器。

ssh remote-user@server-ip

这次你需要输入你的RSA 钥匙 密码 解锁私钥。 您可以在登录时选择自动解锁密钥,以便您以后无需输入密码。

ssh 私钥密码

输入正确的密钥密码后,您将登录到远程 Linux 服务器。 现在退出远程服务器。

exit

然后再次通过 SSH 连接到远程服务器:

ssh remote-user@server-ip

这次您自动登录到远程服务器,尽管您没有输入密码或密钥密码。 此外,您不必在使用时输入密码或密钥密码 scp 命令传输文件。 这 scp 命令也由 openssh-client 包,它默认安装在 Ubuntu 桌面上。

禁用密码验证

虽然现在默认使用 SSH 密钥登录您的服务器,但您仍然可以使用普通密码在另一台计算机上登录服务器。 您不希望黑客发起蛮力攻击来入侵您的服务器,因此在 OpenSSH 服务器中禁用密码验证是一个很好的做法。

要禁用密码验证,请编辑 /etc/ssh/sshd_config 远程服务器上的文件。

sudo nano /etc/ssh/sshd_config

找到这一行:

#PasswordAuthentication yes

将其更改为:

PasswordAuthentication no

然后找到 ChallengeResponseAuthentication 线。 确保它的值设置为 no 像下面。 如果设置为 yes,您仍然可以使用密码登录。

ChallengeResponseAuthentication no

Save 文件并重新启动 SSH 服务。

Debian/Ubuntu

sudo systemctl restart ssh

RHEL/CentOS

sudo systemctl restart sshd

现在如果你没有相应的私钥 ~/.ssh 目录,当您尝试通过 SSH 连接到远程服务器时,您将看到以下错误。

Permission denied (publickey).

这意味着远程服务器只允许使用 ssh 密钥进行 SSH 登录,不允许密码验证。 笔记 如果你设置 PasswordAuthenticationnoChallengeResponseAuthenticationyes,那么您仍然可以使用密码登录。 要禁用密码登录,两者都必须设置为 no.

备份您的公共/私人密钥对

禁用 SSH 密码身份验证后,备份 SSH 密钥非常重要。 如果您丢失了密钥,您将被锁定在您的服务器之外。 将您的公钥/私钥对备份到安全位置,例如您的 USB 驱动器。

cp ~/.ssh/id_rsa* /path/to/safe/location/

您还可以将您的密钥对存储在一个文件夹中,然后使用加密压缩该文件夹并将其发送到 NextCloud 等云存储。

您还可以将密钥对(私钥和公钥)复制到一台新的 Linux 计算机,然后使用 SSH 密钥通过 SSH 连接到您的服务器。 将密钥对复制到新计算机后,将它们移动到 .ssh/ 新用户的目录。

mv id_rsa* ~/.ssh/

您需要将密钥对的所有者更改为新计算机上的用户。

sudo chown new-user:new-user ~/.ssh/id_rsa*

现在您可以使用 SSH 密钥登录到新计算机上的远程服务器。

有时,我想在本地 Ubuntu 计算机上创建两个用户帐户来执行不同的任务。 但是,当我登录到不同的用户帐户时,我仍然想使用 SSH 密钥。 只需将 SSH 密钥对(私钥和公钥)复制到新用户的 ~/.ssh/ 文件夹。 您需要输入您的 RSA 钥匙 密码 解锁私钥。 您可以在登录时选择自动解锁密钥,以便您以后无需输入密码。

ssh-private-key-passphrase-ubuntu-seahorse

在 SSH 代理中存储密钥密码

如果您使用的是仅限命令行的 Linux 机器,您可能会发现每次通过 SSH 连接到其他 Linux 服务器时都需要输入密钥密码。 那是因为您的密钥密码不是由 SSH 代理存储的。

安装和配置 钥匙链 在 SSH 客户端框上。

sudo apt install keychain

然后编辑 .bash_profile 或者 。轮廓 文件。 将以下文本附加到其中,以便每次用户登录时都会执行这两个命令。

/usr/bin/keychain $HOME/.ssh/id_rsa
source $HOME/.keychain/$HOSTNAME-sh

现在注销并重新登录。您将看到如下内容:

Last login: Thu Dec 17 20:38:39 2015 from 74.125.128.103

* keychain 2.7.1 ~ https://www.funtoo.org
* Found existing ssh-agent: 17651
* Adding 1 ssh key(s): /home/<username>/.ssh/id_rsa
Enter passphrase for /home/<username>/.ssh/id_rsa:
* ssh-add: Identities added: /home/<username>/.ssh/id_rsa

当钥匙链启动时,它会检查正在运行的 ssh-agent,否则它会启动一个。 这次您需要输入密钥密码。 用户登录时会记住密钥密码,但是当系统重新启动时,您必须再次输入它。

现在只要 ssh 服务器具有公钥并且您现在正在使用的 ssh 客户端具有私钥/公钥对和钥匙串成功配置,您就可以 ssh 进入 ssh 服务器,而无需键入密钥密码。

更改私钥密码

如果您需要更改私钥密码,可以使用以下命令:

ssh-keygen -f ~/.ssh/id_rsa -p

Enter 您的旧密码,然后输入新密码。

专业提示:使用 Screen 让您的会话保持活跃

您是否一直在远程服务器上工作,突然您的计算机与 Internet 断开连接,您无法再继续在服务器上运行的工作? 你可以用美妙的 screen 使您的会话保持活动状态的实用程序。 安装 screen 在 Ubuntu 服务器上:

sudo apt install screen

然后启动画面:

screen

首次启动时,您将看到介绍文本,只需按 Enter 结束。 然后您将能够像往常一样运行命令。

如果您在服务器上有一个长时间运行的工作并且您现在不需要在服务器上做其他事情,您可以按 Ctrl+A,松开这些键,然后按 D 从当前 Screen 会话分离的键。 您将看到如下所示的消息。

[detached from 32113.pts-1.focal]

这告诉您之前的 Screen 会话 ID 是 32113。您可以从 SSH 会话中注销,甚至关闭您的计算机。 不用担心,服务器上的作业仍在运行。 当您需要返回并检查进度时,通过 SSH 连接到您的服务器并运行以下命令以获取之前的 Screen Session ID。

screen -ls

示例输出:

There is a screen on:
	32113.pts-1.focal	(05/19/2020 03:45:29 PM)	(Detached)
1 Socket in /run/screen/S-linuxbabe.

然后您可以重新附加到之前的 Screen 会话。

screen -r 32113

如果您在 Screen 会话中突然断开 Internet 连接,则可以在再次连接 Internet 时在服务器上运行以下命令。

screen -d -r 32113

这次我们需要 -d 选项,因为前一个 Screen 会话未分离。 我们需要先分离它(-d) ,然后重新连接到它 (-r)。

下一步

我希望本教程可以帮助您在 Ubuntu 上设置无密码 ssh 登录。 您可能还想设置自动安全更新。

  • 在 Ubuntu 上设置自动安全更新(无人值守升级)

与往常一样,如果您发现这篇文章有用,请订阅我们的免费时事通讯以获取更多提示和技巧。 小心。