基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。
环境:
本地:Windows
远程主机VPS:CentOS
若本地环境是Ubuntu,见SSH远程登陆VPS(CentOS)以及多KEY管理
远程主机VPS设置密钥,然后下载到本地。
注意: 若想完全免输密码,生成key时也不要设置密码,下面有个章节单说免输入密码登陆
用putty
以root
身份登录后:
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文件
会提示输入密钥的密码test(生成key时设置的密码,没设置没有)
成功后的图片如下所示:
点击Save private key按钮,生成一个后缀为ppk的文件,比如起名为vps.ppk,这个文件就是已经制作好的用于putty无密码登录的私钥了,一定要妥善保存。
正常的登陆,输入密钥的密码test
再次修改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的过程也不要设置密码。