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

  • 技术文档
  • 2022.03.24
  • 浏览:362

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

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

第一步:在你的Ubuntu桌面上生成一个公共/私有密钥对

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

ssh-keygen -t rsa -b 4096

哪里:

  • -t代表类型。上面的命令生成RSA类型的密钥对。RSA是默认类型。
  • -b代表比特。默认情况下,密钥长度为3072位。我们使用4096位的密钥来增强安全性。

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

  • 私钥(您的身份证)将保存在中。主目录下的ssh/id_rsa文件。
  • 公钥将保存在中。ssh/id_rsa。酒吧档案。

passwordless-ssh-login-ubuntu

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

file ~/.ssh/id_rsa

您应该会看到以下输出:

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

如果您看到“没有这样的文件或目录”错误,这意味着没有创建SSH密钥对。运行ssh-keygen-t rsa-b4096命令再次创建它。

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

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

使用openssh客户端软件包附带的ssh copy id命令可以轻松完成这一点。

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

输入远程用户的密码。

ssh-copy-id ubuntu

公钥将存储在中。ssh/authorized_keys文件位于远程用户的主目录下。现在SSH进入远程服务器。

ssh remote-user@server-ip

这一次,您需要输入RSA密钥密码来解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。

ssh private key passphrase

输入正确的密钥密码短语后,即可登录到远程Linux服务器。现在从远程服务器退出。

exit

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

ssh remote-user@server-ip

这一次,您将自动登录到远程服务器,尽管您没有键入密码或密钥密码短语。此外,在使用scp命令传输文件时,不必键入密码或密钥密码短语。scp命令也由openssh客户端软件包提供,该软件包默认安装在Ubuntu桌面上。

禁用密码身份验证

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

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

sudo nano /etc/ssh/sshd_config

找到这一行:

#PasswordAuthentication yes

将其更改为:

PasswordAuthentication no

然后找到ChallengeResponseAuthentication热线。确保它的值设置为no,如下所示。如果设置为“是”,您仍然可以使用密码登录。

ChallengeResponseAuthentication no

保存文件并重新启动SSH服务。

Debian/Ubuntu

sudo systemctl restart ssh

瑞尔/森托斯

sudo systemctl restart sshd

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

Permission denied (publickey).

Read: Connection reset by peer

这意味着远程服务器只允许使用SSH密钥进行SSH登录,不允许密码身份验证。请注意,如果您将PasswordAuthentication设置为no,将ChallengeResponseAuthentication设置为yes,则仍然可以使用password登录。要禁用密码登录,必须将两者都设置为“否”。

备份您的公钥/私钥对

禁用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/folder。您需要输入RSA密钥密码短语才能解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。

ssh-private-key-passphrase-ubuntu-seahorse

在SSH代理中存储密钥密码短语

如果您使用的是仅限命令行的Linux框,您可能会发现每次SSH到其他Linux服务器时都需要输入密钥密码短语。这是因为SSH代理没有存储密钥密码短语。

在SSH客户端上安装并配置keychain。

sudo apt install keychain

然后编辑。bash_简介或。档案文件。在其中添加以下文本,以便用户每次登录时都会执行这两个命令。

/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 ~ http://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代理,否则会启动一个。这次需要输入密钥密码短语。用户登录时会记住密钥密码,但当系统重新启动时,您必须再次输入。

现在,只要ssh服务器具有公钥,并且您正在使用的ssh客户端成功配置了私钥/公钥对和密钥链,您就可以通过ssh连接到ssh服务器,而无需键入密钥密码短语。

更改私钥密码短语

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

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

输入旧密码,然后输入新密码。

专业提示:使用屏幕让你的会话保持活跃

您是否一直在远程服务器上工作,突然您的计算机与Internet断开连接,无法继续在服务器上运行作业?您可以使用精彩的屏幕实用程序来保持会话的活力。在Ubuntu服务器上安装屏幕:

sudo apt install screen

然后启动屏幕:

screen

第一次启动时,您将看到一个介绍文本,只需按Enter键即可结束。然后你就可以像往常一样运行命令了。

如果您在服务器上有一个长时间运行的作业,现在不需要在服务器上执行其他操作,可以按Ctrl+a,释放这些键,然后按D键从当前屏幕会话中分离。您将看到如下消息。

[detached from 32113.pts-1.focal]

这表明上一屏幕会话ID为32113。您可以从SSH会话中注销,甚至可以关闭计算机。别担心,服务器上的作业仍在运行。当需要返回并检查进度时,请将SSH连接到服务器并运行以下命令以获取上一个屏幕会话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 -r 32113

如果您正在屏幕会话中,Internet连接突然中断,那么当您再次连接Internet时,可以在服务器上运行以下命令。

screen -d -r 32113

这次我们需要-d选项,因为之前的屏幕会话没有分离。我们需要先拆下它(-d),然后再重新连接到它(-r)。

下一步

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

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

和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。