在简单的步骤中设置无密码SSH登录
通常,我们输入用户名和密码组合以连接到SSH控制台。
但是,有些东西比密码登录更安全,我们使用加密密钥密码SSH登录。
破解钥匙的机会有效零,而糟糕的密码则与暴力的尝试太常见。
只有具有正确匹配的密钥对(私有和公共)的工作站将被允许登录SSH服务器,而无需键剖视图,不允许访问访问权限。
在本教程中,我们将了解我们如何设置密码SSH登录Linux系统。
为了说明无密码SSH登录,我将从客户端CentOS机器(192.168.168.121)连接到远程Ubuntu机器(192.168.215.83),没有任何密码。
检查现有的SSH键
我们可能在客户端计算机上有一些现有键,这些密钥是之前创建的。
我们可以使用现有键或者创建新密钥。
此外,如果使用相同的选项运行ssh-keygen命令,请记住我们可能会覆盖退出键。
$ls -al ~/.ssh/id_*.pub
如果它返回"没有这样的文件或者目录",则意味着没有目前可用的公钥。
1)生成密钥对
要生成SSH键,可以使用将生成两个键并将其存储在两个不同的文件中的"SSH-Keygen"命令"。
这两个文件存储在用户主目录中的隐藏文件夹中。
我们可以为文件提供自己的名称或者默认情况下它将存储在ID_DSA(私钥)和ID_DSA.PUB(公钥)文件中。
当我们创建键时,我们将被要求输入密码。
它用于保护密钥,当我们想要通过SSH连接时将被要求。
以下SSH-Keygen命令用4096密钥大小(-B),RSA算法(-T),可选的电子邮件地址作为注释(-c),创建一个新的SSH键。
$ssh-keygen -t rsa -b 4096 -C "[email protected]"
默认情况下,私有存储在ID_RSA文件中,避免覆盖我们可以存储在其他文件中。
如果我们隐式指定文件名,那么这两个键都将存储在当前文件夹中。
Enter file in which to save the key (/home/tom/.ssh/id_rsa):
默认情况下,输入密码短语为空。
如果我们有任何需要与远程计算机无密码连接的脚本或者实用程序,那么将PassPshare退出为空。
Enter passphrase (empty for no passphrase):
以下消息指示其中存储的私有和公钥的位置和哪些文件。
Your identification has been saved in /home/tom/.ssh/id_rsa Your public key has been saved in /home/tom/.ssh/id_rsa.pub
这显示了该键是唯一的指纹和随机图象,并且可以与其他键共享以验证公钥。
The key fingerprint is: SHA256:EihoyQO0PmdBKjesoIKZ5X3JdzN0It18a7FxGi4ovWQ [email protected] The key's randomart image is: +---[RSA 4096]----+ |o. . | |oo= . . o | |+B*.. . . + + = .| |BB.+.. o + + o O | |Bo.o. = S E . * | |. + . o = + o | | . | | | | | +----[SHA256]-----+
运行ssh-keygen命令时,它会默认在~/.ssh
目录中保留键对,如果它不存在,将创建:
我们可以使用以下ls命令列出密钥对文件:
[tom@centos02 ~]$ls -l /home/tom/.ssh/ total 8 -rw-------. 1 tom tom 3381 Jan 28 13:00 id_rsa -rw-r--r--. 1 tom tom 742 Jan 28 13:00 id_rsa.pub
创建密钥对后的以下命令显示指纹和OrniceArt图像:
$ssh-keygen -lv
要显示公钥文件的内容运行以下命令。
$cat .ssh/id_rsa.pub
在下一节中,我们讨论如何将"Pub"文件的内容复制到远程主机。
2)将公钥复制到远程机器
现在,我们需要将公钥的内容复制到远程计算机上的"~/.ssh /授权_keys"文件"。
如果不存在,则在用户主目录中创建.ssh
目录和underized_keys
文件(如果root然后/home/root)。
为此,我们可以手动或者使用ssh-copy-id
命令进行。
通过手动副本
以下命令在远程计算机上创建用户"主文件夹(TOM)中的".ssh"目录:
$sudo ssh [email protected] mkdir -p .ssh
现在粘贴或者将公钥(客户机)的内容转移到远程服务器:
$sudo cat .ssh/id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys'
通过使用ssh-copy-id
如果我们不想手动复制它,我们可以使用"ssh-copy-id"命令",该命令将与如下方式相同:
$sudo ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
我们可以查看授权_keys文件的内容以确保复制键。
$cat .ssh/authorized_keys
3)验证无密码的ssh
现在我们已将公钥复制到服务器,我们应该在没有任何密码的情况下登录。
我们可以使用用户(TOM)运行以下SSH命令来验证:
[tom@centos02 ~]$ssh [email protected] Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-26-generic x86_64) Last login: Fri Jan 29 03:14:32 2017 from 104.237.141.158 $hostname ubuntu01 $
我们可以从上面的输出中看到它没有提示任何密码。
禁用密码身份验证
如果服务器上的所有用户帐户都使用公钥(包括root)进行身份验证,则可以通过密码禁用身份验证。
要通过公钥启用身份验证,并通过密码禁用身份验证,编辑"/etc/ssh/sshd_config"文件。
在"sshd_config"上修改以下行:
$vi /etc/ssh/sshd_config RSAAuthentication yes PubkeyAuthentication yes PasswordAuthentication no UsePAM no ChallengeResponseAuthentication no
在制作更改后重新启动sshd
服务:
$sudo systemctl reload sshd
一旦用户使用键对用户进行身份验证,我们可以考虑禁用SSH的"root"登录(设置PerplorLogin No)。
带密码的钥匙
在私钥需要更多安全性的情况下,建议设置密码。
当键具有密码时,每次都会连接时,请求它提示密码。
它几乎就像密码登录。
OpenSSH具有一个名为"ssh-add"的实用程序,可以将SSH私钥添加到SSH身份验证中,因此用户可以在没有密码的情况下登录。
我们首先使用"-p""选项为现有密钥设置密码
[tom@centos02 ~]$ssh-keygen -p Enter file in which the key is (/home/tom/.ssh/id_rsa): Key has comment '[email protected]' Enter new passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved with the new passphrase.
现在,如果我们再次尝试登录,那么它将提示密码:
[tom@centos02 ~]$ssh [email protected] Enter passphrase for key '/home/tom/.ssh/id_rsa':
运行以下命令缓存已解锁的私钥:
$ssh-agent $SHELL $ssh-add -L The agent has no identities.
$ssh-add Enter passphrase for /home/tom/.ssh/id_rsa: Identity added: /home/tom/.ssh/id_rsa ([email protected])
现在尝试再次登录,看看我们不会提示我们输入密码。
设置许可
只需确保.ssh目录和远程服务器上的授权文件具有适当的权限。
要保护关键字访问的公钥设置权限,如下所示:
$sudo chmod 700 .ssh $sudo chmod 600 .ssh/authorized_keys