在Ubuntu上设置无密码SSH登录的2个简单步骤
- 技术文档
- 2022.03.24
- 浏览:897
文章目录[隐藏]
本教程介绍如何在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。酒吧档案。
从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/authorized_keys文件位于远程用户的主目录下。现在SSH进入远程服务器。
ssh remote-user@server-ip
这一次,您需要输入RSA密钥密码来解锁私钥。您可以在登录时选择自动解锁密钥,这样以后就不必输入密码。
输入正确的密钥密码短语后,即可登录到远程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代理中存储密钥密码短语
如果您使用的是仅限命令行的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上设置自动安全更新(无人参与升级)
和往常一样,如果你觉得这篇文章很有用,那么订阅我们的免费时事通讯以获得更多提示和窍门。当心。