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

本教程说明了如何设置 无密码SSH登录 在Ubuntu桌面上。 基本上有两种通过OpenSSH服务器验证用户登录身份的方法: 密码认证基于公钥的身份验证。 后者也称为 无密码SSH登录 因为您不必输入密码。

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

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

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

ssh-keygen -t rsa

-t 代表类型。 上面的命令生成一个RSA类型的密钥对。 RSA是默认类型,因此您也可以输入 ssh-keygen 在终端。 默认情况下,密钥的长度为2048位,如果您希望更强的安全性,则可以指定一个4096位的密钥,如下所示。

ssh-keygen -t rsa -b 4096

当询问您要保存密钥的文件时,只需按Enter键即可选择默认文件。 接下来,输入一个至少20个字符长的密码。 密码短语用于加密私钥。 私钥(您的身份)将保存在 .ssh / id_rsa 在您的主目录下。 公钥将保存在 .ssh / id_rsa.pub 文件。

从randomart图片中,我们可以看到密钥的长度(RSA 4096)。 如果你看看 ~/.ssh/id_rsa 与文件

head ~/.ssh/id_rsa

您可以看到私钥已加密,如私钥文件的前两行所示。

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED

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

这很容易做到 ssh-copy-id 命令,由 openssh-client 包。

ssh-copy-id [email protected]

输入远程用户的密码。 样本输出:

/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
[email protected]'s password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

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

ssh [email protected]

这次您需要输入RSA 密码短语 解锁私钥。 您也可以在登录时选择自动解锁密钥,这样就不必再输入密码了。

ssh私钥密码短语

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

exit

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

ssh [email protected]

您可以看到,尽管您没有键入密码或密钥密码,但是您已自动登录到远程服务器。 另外,使用时,您无需键入密码或密钥密码 scp 传输文件的命令。 的 scp 该命令也由 openssh-client 软件包,默认情况下安装在Ubuntu桌面上。

禁用密码认证

尽管默认情况下现在使用SSH密钥登录服务器,但是您仍然可以使用普通密码登录另一台计算机。 您不希望黑客使用暴力手段入侵您的服务器。

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

sudo nano /etc/ssh/sshd_config

找到这一行:

#PasswordAuthentication yes

更改为:

PasswordAuthentication no

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

ChallengeResponseAuthentication no

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

sudo service ssh restart

要么

sudo systemctl restart ssh

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

Permission denied (publickey).

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

备份公共/私人密钥对

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

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

您可以将密钥对复制到新的Linux计算机上,并使用ssh密钥SSH到服务器中。 将密钥对复制到新计算机后,需要将密钥对的所有者更改为新计算机上的用户。

sudo chown new-user:new-user id_rsa*

然后将它们移到 .ssh/ 新用户的目录。

mv id_rsa* ~/.ssh/

现在,您可以使用ssh键登录到新计算机上的远程服务器。 您还可以将密钥对存储在一个文件夹中,然后使用加密方式压缩该文件夹并将其发送到NextCloud之类的云存储。

在SSH代理中存储密钥密码

如果您使用的是仅命令行的Linux计算机,则可能会发现每次ssh进入其他Linux服务器时都需要输入密钥密码。 这是因为ssh代理未存储您的密钥密码。

安装和配置 钥匙扣 在SSH客户端计算机上。

sudo apt install keychain

然后编辑 .bash_profile 要么 .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 ~ 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-agent,否则将启动一个。 这次您需要输入密钥密码。 密钥密码将在用户登录时被记住,但是当系统重启时,您必须再次输入。

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

更改私钥密码

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

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

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

下一步

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

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

与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 照顾自己。

Sidebar