使用SSH登录远程服务器的时候,只是用密码会比较危险,因为密码可能遭到暴力破解。而采用SSH 密钥公钥登录的话,则保证了安全性。密钥放在客户端,公钥放在服务器端,在用SSH登录服务器的时候,会对比密钥与公钥,如果匹配才允许登录(无密码登录),否则会拒绝。只要保证密钥不泄露,那么其他人就无法登录你的服务器了。同时,你也可以为密钥增加密码进一步提高密钥的安全性。
下面讲解具体步骤。
一、创建RSA密钥公钥
创建密钥公钥可以在客户端进行,也可以在服务端进行。在客户端创建的好处是及其本身是自己的,可以随时使用,而服务器则需要登录权限。使用下面的命令创建钥匙对:
ssh-keygen -t rsa
二、设置密钥公钥
输入了上面的命令之后,就会进入创建钥匙的流程,会有几个问题,依次为:
Enter file in which to save the key (/home/demo/.ssh/id_rsa):这是询问保存密钥的文件,保持默认,点击回车键确认。
Enter passphrase (empty for no passphrase):这是要求输入保护密钥的密码。你可以在后面输入密码按回车键,也可以不输入按回车键。 之所以说密钥公钥对能够提高登录服务器的安全性,是因为客户端在登录服务器时,客户端的密钥与服务器的公钥必须匹配才可以。如果客户端的密钥被其他人得到了,那么其他人也可以通过这个密钥与服务器的公钥匹配,进而有权限登录服务器。如果密钥有保护密码的话,那么每次登录时必须输入密钥的保护密码才可以进行密钥公钥的匹配操作。即使他人得到了密钥,也必须要破解密钥的保护密码才行。 创建密钥公钥对的整个过程大概如下(有些地方因机器和命令版本而异):
ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/demo/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/demo/.ssh/id_rsa. Your public key has been saved in /home/demo/.ssh/id_rsa.pub. The key fingerprint is: 4a:dd:0a:c6:35:4e:3f:ed:27:38:8c:74:44:4d:93:67 demo@a The key's randomart image is: +--[ RSA 2048]----+ | .oo. | | . o.E | | + . o | | . = = . | | = S = . | | o + = + | | . o + o . | | . o | | | +-----------------+现在,密钥公钥就创建完成了。密钥保存在(Linux系统)/home/user/.ssh/id_rsa,(Mac系统)/Users/user/.ssh/id_rsa。公钥保存在(Linux系统)/home/user/.ssh/id_rsa.pub,(Mac系统)/Users/user/.ssh/id_rsa.pub。其中,user改为你自己的用户名。 # 三、上传公钥到服务器 因为创建公钥密钥是在客户端进行的,密钥保存在客户端,公钥应该上传到服务器才行。 可以使用两种方式上传公钥,公钥将保存在服务器的(Linux系统)/home/user/.ssh/authorized_keys文件中。 1.使用ssh-copy-id命令:
ssh-copy-id user@123.45.56.78命令中的user与ip地址要改成你自己的服务器的用户名和ip地址。在有的系统中没有ssh-copy-id命令,那么可以使用第2中方式。 2.使用ssh命令:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
四、使用密钥登录服务器
将公钥上传到服务器之后,就可以使用密钥公钥登录服务器了。在第二步的时候,如果你输入了密钥保护密码的话,那么使用密钥登录时需要提供保护密码才行。使用命令登录服务器:
ssh user@123.45.56.78
五、修改服务器端SSH服务的配置
使用SSH登录服务器,服务器端的SSH服务的配置文件规定使用密码登录还是使用密钥公钥登录。为了保证安全,我们可以修改服务配置文件,只允许使用密钥公钥登录。
首先,使用SSH登录服务器。依次执行下面的命令:
1.打开服务器的SSH服务配置文件,这里使用vi编辑器,也可以使用其他的编辑器。
sudo vi /etc/ssh/sshd_config
2.查找”PermitRootLogin”字符串,如果该字符串前面有’#’号,就删掉’#’号,并将其后的”yes”改为”no”。如果本来就是”no”,就不需要修改。这是不允许使用root账户登录服务器。
3.查找”RSAAuthentication“字符串,如果该字符串前面有’#’号,就删掉’#’号,并将其后的”no”改为”yes”。如果本来就是”yes”,就不需要修改。这是要求使用RSA验证算法验证公钥密钥是否匹配。
4.查找”PubkeyAuthentication“字符串,如果该字符串前面有’#’号,就删掉’#’号,并将其后的”no”改为”yes”。如果本来就是”yes”,就不需要修改。这是要求登录时使用公钥密钥验证。
5.查找”PasswordAuthentication”字符串,如果该字符串前面有’#’号,就删掉’#’号,并将其后的”yes”改为”no”。如果本来就是”no”,就不需要修改。这是不允许使用密码登录。
6.重新启动服务器端的SSH服务:
/bin/systemctl restart sshd.service
该命令是在CentOS 7上重新启动SSH服务,其他发行版的Linux系统可以自行搜索重启服务的命令。
经过上面的6步,服务器端的SSH服务只允许使用密钥公钥登录,不允许使用密码登录,也不允许root用户登录。
注意:如果你需要从很多个客户端登录服务器的话,那么密钥可以直接复制到每个客户端的(Linux系统)/home/user/.ssh/,(Mac系统)/User/user/.ssh/目录下。
通过前面五步,其实已经完成了只使用密钥公钥登录服务器的操作。下面的步骤是可选的。
(可选)六、保持SSH连接不断
可以按照博文进行配置:保持SSH连接不自动断开