如何在Linux服务器上设置基于SSH密钥的身份验证

时间:2020-02-23 14:31:00  来源:igfitidea点击:

在本教程中,我们将学习在Linux服务器上设置基于SSH密钥的身份验证。

什么是SSH?

安全shell或者SSH是用于与服务器安全通信的加密网络协议。

SSH在客户端-服务器体系结构中提供了一个安全通道,允许SSH客户端和SSH服务器之间进行通信。

如何服务器进行身份验证客户端?

SSH服务器可以通过多种方式对客户端进行身份验证。
最基本的方法是密码验证,但不是最安全的方法。
因为即使密码以安全的方式发送到服务器,但如果密码不是很复杂,也很容易被强行强制使用。

什么是SSH密钥?

SSH密钥是一对两个加密安全密钥,用于对SSH服务器进行客户端身份验证。
每个密钥对都包含一个公用密钥和一个专用密钥。

私钥由客户端保留,并且绝对保密。
如果私钥被泄露,那么任何人都可以使用私钥访问服务器,而无需进一步的身份验证。
为了增加安全性,可以在客户端使用密码对私钥进行加密。

SSH密钥对的公钥已上载到客户端要登录的服务器。
公钥将添加到客户端要登录的用户帐户内的特殊文件中。
该特殊文件在.ssh目录中,称为authorized_keys。

基于SSH密钥的身份验证如何工作?

当客户端要访问远程服务器时,它将启动SSH连接。
然后,远程服务器向客户端发送一些随机消息。
客户端使用其私钥对随机消息进行加密,然后将加密后的消息发送回服务器。
然后,服务器使用客户端上载的SSH密钥对中的公共密钥来解密客户端发送的加密消息。
如果解密的消息与服务器最初发送的消息相同,则对客户端进行身份验证并授予访问权限。
否则,客户端将被拒绝访问远程服务器。

现在是本教程的有趣部分。

如何创建SSH密钥?

客户端

打开终端并使用cd命令进入用户目录。

theitroad-MacBook-Pro:~ theitroad$cd

现在移入.ssh目录。

theitroad-MacBook-Pro:~ theitroad$cd .ssh

您可以使用ls -la命令在.ssh目录中列出公共-私有密钥。

theitroad-MacBook-Pro:.ssh theitroad$ls -la
total 40
drwxr-xr-x   5 theitroad  staff   170 Mar  8 09:17 .
drwxr-xr-x+ 73 theitroad  staff  2482 Mar  4 12:32 ..
-rw-------   1 theitroad  staff  1766 Jan 24  2014 github_rsa
-rw-r--r--   1 theitroad  staff   405 Jan 24  2014 github_rsa.pub
-rw-r--r--   1 theitroad  staff  8844 Mar  7 13:04 known_hosts

现在创建一个新的SSH密钥对,我们使用标准OpenSSH随附的ssh-keygen实用程序。

系统将要求您输入要保存密钥的文件名。

如果文件名已经存在,则会询问您是否要覆盖现有文件。
如果您覆盖了某个其他应用程序正在使用的现有密钥,则它们将不再能够进行身份验证。
因此,请谨慎选择。

然后将要求您输入密码(这是可选的)。
如果您不想设置密码,则只需按ENTER并继续。

密码短语有什么用?

私钥对客户端绝对保密,并且永远不会在网络上公开。
密码短语用于解密客户端上的私钥。
因此,它提供了额外的安全性。

如果您选择设置密码短语,则每次使用密钥时都必须输入密码短语。

在此示例中,我将使用名称theitroad_rsa保存ssh密钥,并且不会设置密码。

theitroad-MacBook-Pro:.ssh theitroad$ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/theitroad/.ssh/id_rsa): /Users/theitroad/.ssh/theitroad_rsa
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /Users/theitroad/.ssh/theitroad_rsa.
Your public key has been saved in /Users/theitroad/.ssh/theitroad_rsa.pub.
The key fingerprint is:
SHA256:BmtTxJHRvf2B1M/kWOLuzWf83eF14ZXOqZ45JB1nkxt [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|  oo+o.o*ooo     |
|  . ...+= =      |
|   .o.Bo+. .     |
|   ooB..oE  +    |
|   . SOo..       |
|      *.*        |
|     . * +       |
|  .o  o + .      |
| ++o.+           |
+----[SHA256]-----+

注意!以上密钥指纹和密钥的randomart图像被有意修改。
不要尝试使用它们,因为它们仅用于演示。

新的ssh密钥对已创建,可以使用ls -la命令列出。

theitroad-MacBook-Pro:.ssh theitroad$ls -la
total 56
drwxr-xr-x   5 theitroad  staff   170 Mar  8 09:17 .
drwxr-xr-x+ 73 theitroad  staff  2482 Mar  4 12:32 ..
-rw-------   1 theitroad  staff  1766 Jan 24  2014 github_rsa
-rw-r--r--   1 theitroad  staff   405 Jan 24  2014 github_rsa.pub
-rw-r--r--   1 theitroad  staff  8844 Mar  7 13:04 known_hosts
-rw-------   1 theitroad  staff  1679 Mar  8 09:27 theitroad_rsa
-rw-r--r--   1 theitroad  staff   418 Mar  8 09:27 theitroad_rsa.pub

theitroad_rsa是私钥,必须绝对保密。
theitroad_rsa.pub是公共密钥,可以上传到服务器。

现在,我们需要刚创建的ssh密钥对的公钥。
复制theitroad_rsa.pub文件的内容。

theitroad-MacBook-Pro:.ssh theitroad$cat theitroad_rsa.pub 
ssh-rsa AAAADAQ3NzaC1yc2EAAABAAAABFDL8ABAQCfPTHmKDyzpu88l8ehBnoOysR/VNEx/Rg63OAwzknFd4fkl/jJXPf539OBxm7lh94xcELm+NXaJcHu6M/7vhwagvSyj9PmL7KPjYZ7PrFYlE0DlOgSRUp0LOM6cHvmtwFVMcPSFN963aH0uzd5vsNCVbOh4tyeVhR4NAlUz5HCXxLNgM6tbkCT7ke3UpC9o7heIBOu3nD8SJL6GrYzLFOjwo9JZriud66BY3quN4Il1BGtwf1sdT7VCYfR7F18hRtSA7+g7dMg3UNXQ5YdBKpZtEFiRK+zM77LY/EpxyYi4Q9C+XYzRt0WfHvCaIF6jfdiYa5hA7A0ixWFw8mB [email protected]

注意!上面的公钥是有意修改的。
不要尝试使用它,因为它仅用于演示。

服务器端

现在是时候将公钥添加到服务器了。
为此,我们首先需要登录服务器并使用cd命令进入用户目录。
现在检查.ssh目录是否存在。

如果存在.ssh目录,则使用cd .ssh命令进入目录。

如果.ssh目录不存在,则使用mkdir .ssh命令创建它,然后使用cd .ssh命令进入内部。

并使用以下命令限制.ssh目录权限。

$chmod 700 .ssh

现在,使用vi命令打开authorized_keys文件并粘贴公共密钥。

$vi authorized_keys

粘贴theitroad_rsa.pub文件内容

ssh-rsa AAAADAQ3NzaC1yc2EAAABAAAABFDL8ABAQCfPTHmKDyzpu88l8ehBnoOysR/VNEx/Rg63OAwzknFd4fkl/jJXPf539OBxm7lh94xcELm+NXaJcHu6M/7vhwagvSyj9PmL7KPjYZ7PrFYlE0DlOgSRUp0LOM6cHvmtwFVMcPSFN963aH0uzd5vsNCVbOh4tyeVhR4NAlUz5HCXxLNgM6tbkCT7ke3UpC9o7heIBOu3nD8SJL6GrYzLFOjwo9JZriud66BY3quN4Il1BGtwf1sdT7VCYfR7F18hRtSA7+g7dMg3UNXQ5YdBKpZtEFiRK+zM77LY/EpxyYi4Q9C+XYzRt0WfHvCaIF6jfdiYa5hA7A0ixWFw8mB [email protected]

并使用:wq命令保存内容。

如何使用ssh键访问服务器?

打开终端并输入以下命令。

$ssh -i /Users/theitroad/.ssh/theitroad_rsa [email protected]

注意!根据您要访问的服务器替换" [email protected]"。