在简单的步骤中设置无密码SSH登录

时间:2020-03-05 15:29:45  来源:igfitidea点击:

通常,我们输入用户名和密码组合以连接到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