一般购买 Linux VPS 的时候,服务商都会默认开通 SSH 的密码登陆,这个虽然方便(其实后面讲到使用 SSH Key 会发现更加方便),但是无疑会给服务器带来很多安全风险,常规的规避办法(例如更改端口,禁止 root 登录等)虽然有一定的效果,但是本质上还是无法避免对服务器的暴力破解,因此今天在自己尝试后,给大家介绍一个更加方便安全的 SSH Key 登录服务器的办法。
什么是 SSH Key 登录
基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。
如何使用 SSH KEY 登录
第一步:生成密钥
1 | root@jayshao:~# ssh-keygen -t rsa //先运行这个命令 |
此时在/root/.ssh/下面的id_rsa和id_rsd.pub生成完毕,id_rsa就是我们的私钥需要妥善保管,id_rsd.pub是保存在远程Linux上面的公钥。
第二步:将密钥添加到远程Linux服务器
用winscp或者其他的文件传输软件,将id_rsd.pub文件上传到/root/.ssh/下面(如果没有则创建此目录),并重命名为:authorized_keys
如果是在Linux服务器上生成的密钥直接执行:
1 | mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys |
再执行这行修改权限。
1 | chmod 600 /root/.ssh/authorized_keys |
修改/etc/ssh/sshd_config 文件,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,保存。
最后重启sshd服务,Debian/Ubuntu执行
1 | /etc/init.d/ssh restart |
CentOS执行
1 | /etc/init.d/sshd restart |
第三步:客户端测试使用密钥登录
这一步,各个客户端都有所不同,我举例在windows下使用Bitvise SSH Client的方法,其他客户端基本都大同小异。
首先,在客户端的密码验证处,选择使用密钥验证
然后,点击下方的Client Key Manager
选择之前生成的id_rsa密钥,并导入到密钥管理器中
最后,在Client Key中,选择你刚才导入的Key
点击登录看看,是不是可以正常登录了呢?
第四步:禁用密码登录
修改/etc/ssh/sshd_config文件,将PasswordAuthentication yes 修改成 PasswordAuthentication no
然后重启sshd服务,Debian/Ubuntu执行
1 | /etc/init.d/ssh restart |
CentOS执行
1 | /etc/init.d/sshd restart |
ok,设置完成。