如何在Linux服务器上设置基于SSH密钥的身份验证
在本教程中,我们将学习在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]"。