面对无止境的密码暴力破解问题,拉黑名单的方式似乎已没什么效果,换一种 SSH 认证方式会发现整个世界立马清净不少。本文以 secureCRT 客户端为例,详细记录下在客户端创建 SSH 公钥-私钥密钥对、服务器端开启密钥认证(关闭密码认证)和远程登录测试的全过程。
1、创建公钥-私钥密钥对。公钥-私钥类似锁和钥匙的概念,公钥如锁,公开面对所有用户,只有认证通过才继续提供服务,一般放置在服务器端;密钥如匙,用来验证是否有权限操作,保密不对外公开,一般放置在客户端。secureCRT 软件上新建好 SSH 会话连接后,右键属性,然后按如下图标示步骤操作,可生成公钥文件“Identity.pub”和私钥文件“Identity”。
在创建公钥-私钥密钥对过程中,有几个地方需要注意下:
密钥类型可选择项有“RSA”和“DSA”,推荐选择“RSA”,因为RSA具有更高的安全性,特别是 2048 位或更长的密钥长度;
密钥位长度可输入“512”-“2048”,推荐输入“2048”,密钥长度越大,被破解的难度就越大;
通行短语可设置可不设置,主要用于加密私钥,不影响服务器与客户端的密钥认证和加密通信,但还是推荐设置一个常用的字符串,比如 纯数字类型的 pin 码、数字加上字符类型的邮箱地址等,可以防止密钥丢失造成的损失。
最后的密钥格式,按默认的“标准公钥和VanDyke私钥格式”保存即可。但是这有个小坑,在后续的服务器端设置公钥时再细说。
2、将 .pub 公钥文件上传到服务器端。比如上传到/root/.ssh/目录下,可以用各种 FTP 软件或方式,上传过程,略。
3、将 SSH2 兼容格式的公钥文件转换成 OpenSSH 兼容格式。这个是个小坑,如果服务器端启用的是 OpenSSH 应用服务,直接使用上传的公钥文件作为密钥认证,客户端发起连接时会提示错误,如下图3:
[root@VM-8-15-centos ~]# cd /root/.ssh/
[root@VM-8-15-centos .ssh]# ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys
4、服务器端配置 SSH 服务,开启密钥认证,关闭密码认证。SSH服务 配置文件路径为 /etc/ssh/sshd_config,使用 vi 或 nano 等命令,将下述配置项前的注释符号#移除,并将密码认证由 yes 改为 no:
PubkeyAuthentication yes //允许公钥认证
AuthorizedKeysFile .ssh/authorized_keys //指定公钥文件的位置
PasswordAuthentication no //禁用密码
5、服务器端重启 SSH 服务,并查看运行状态。
systemctl restart sshd
systemctl status sshd
6、验证:secureCRT 客户端打开如图1中的会话连接属性页面,去除鉴权栏中“密码”复选框(去除密码认证),然后再发起 SSH 远程连接,输入通行短语,登录成功。
7、收尾工作:及时修改文件/目录权限(700->600)、删除不必要文件等,略。