使用SSH密匙认证登录VPS

基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。

环境:
本地: Windows
远程主机VPS: CentOS

若本地环境是Ubuntu,见SSH远程登陆VPS(CentOS)以及多KEY管理

生成公钥和私钥

远程主机VPS设置密钥,然后下载到本地。
注意: 若想完全免输密码,生成key时也不要设置密码,下面有个章节单说免输入密码登陆

puttyroot身份登录后:

ssh-keygen -t rsa

输出

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):    ##直接回车=默认路径,或者自己填写
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): test        ##设置密码(直接回车则不设密码,若想完全免输入密码这里也不要设置)
Enter same passphrase again:    test                    ##重复密码
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
04:e1:93:92:95:ba:55:21:58:05:7d:57:58:92:32:d3 root@vpn
The key's randomart image is:
+--[ RSA 2048]----+
|     oB*o. ..=o  |
|    .+.+o = E.   |
|    o.+... =     |
|    ...o         |
|     o  S        |
|    .            |
|                 |
|                 |
|                 |
+-----------------+    

会在/root/.ssh/目录下生成了2个文件,id_rsa为私钥,id_rsa.pub为公钥。

参数说明
参数-t rsa 表示使用rsa算法进行加密(也可指定为dsa算法)
参数-b 4096 设置采用的字节长度,默认2048,变态点可以选4096,生成的时间稍长点。

导入公钥,设置权限

cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

设置权限

cd /root/.ssh/

chmod 600 authorized_keys

修改sshd配置文件

vi /etc/ssh/sshd_config

找到下面行,确保前面#已删除

RSAAuthentication yes          //Centos7有些版本可能不含这行,不用管
PubkeyAuthentication yes
AuthorizedKeysFile    .ssh/authorized_keys

重启ssh服务:

service sshd restart

客户端配置密钥

putty官网下载 puttygen

将远程主机VPS上的/root/.ssh/id_rsa下载到本地,利用puttygen转换为putty用的ppk文件

从远程主机VPS下载,可以参考Win管理远程Linux VPS/服务器文件工具 - winscp

点击File,Load private key,导入/root/.ssh/id_rsa文件

putty-ssh-key1

会提示输入密钥的密码test(生成key时设置的密码,没设置没有)

putty-ssh-key2

成功后的图片如下所示:

putty-ssh-key3

点击Save private key按钮,生成一个后缀为ppk的文件,比如起名为vps.ppk,这个文件就是已经制作好的用于putty无密码登录的私钥了,一定要妥善保存

设置PUTTY认证链接

putty-ssh-key4

putty-ssh-key5

正常的登陆,输入密钥的密码test

putty-ssh-key6

再次修改SSH的配置文件

vi /etc/ssh/sshd_config

找到

PasswordAuthentication yes

改成

PasswordAuthentication no

然后重启sshd

service sshd restart

至此,就只能用私钥登录到VPS了,安全性大大增强了。最后温馨提示,妥善保存你的私钥。

关于免输入密码设置

涉及的密码包括两个
1.远程主机用户例如root的密码
2.生成ssh key的密码

上面更改的

PasswordAuthentication no

针对的是远程主机用户例如root的密码,不能免除SSH KEY的密码
所以若想完全免输密码,生成key的过程也不要设置密码。