Linux 使用 SSH 证书登录

*请确保所有操作无误,登录正常之后再断开连接或重启,避免无法登录到服务器。

为什么要使用证书登录

在使用 SSH 登录远程服务器时,我们通常使用的是密码认证,只要用户名密码正确即可登录。这样的安全性对于服务器而言,其实很低。

因为我们的帐号密码可能会被聪明的人社工,也会被愚笨的人穷举。为了杜绝这种可能性,我们应当使用证书登录。

怎么使用证书登录

证书登录是由两部分组成,一部分是公钥,用于加密,另一部分是私钥,用于解密。在使用证书登录之前,我们首先应该制作密钥,而制作密钥可以在本机也可以在服务器上完成。

在服务器上制作密钥

使用上一篇文章中所创建的系统维护管理员帐号登录到服务器,输入如下命令:

ssh-keygen -t rsa

根据提示输入密钥生成路径和密码。如指定路径为 /home/username/.ssh/ 之后,即在 /home/username/.ssh/ 中找到生成的公钥 id_rsa.pub 和私钥 id_rsa

之后执行如下命令:

cat id_rsa.pub >> authorized_keys

生成 sshd_config 中所指定的文件。

然后将 id_rsa 私钥文件传回本地。

在本地制作密钥

在本地制作密钥,Windows 系统可以使用如 puttygen / Xshell / SecureCRT 等软件生成。具体生成方法请参考相关文章。

本地生成密钥之后的操作与服务器相反,需要将 id_rsa.pub 公钥文件上传到服务器 /home/username/.ssh/ 路径下。不方便上传也可以新建 authorized_keys 文件,复制粘贴 id_rsa.pub 公钥文件内容即可。

修改服务器 SSH 配置

当密钥完成之后,修改 /etc/ssh/sshd_config 文件,更改以下项目设置:

PermitRootLogin no # 禁止 root 用户远程登录
PermitEmptyPasswords no # 禁止空密码用户登录
RSAAuthentication yes # 启用 RSA 认证
PubkeyAuthentication yes # 启用公钥认证
PasswordAuthentication no # 禁止密码认证
StrictModes no

配置完成保存之后重启 ssh 服务:

sudo service sshd restart

使用证书登录服务器

ssh 重启之后我们即可使用证书登录到服务器。

Xshell 中直接使用 id_rsa 私钥文件,而在 putty 中使用证书登录则需要先用 puttygen 转换 id_rsa 私钥文件为 ppk 证书文件供 putty 使用。

使用证书登录成功之后,就可以删除 /home/username/.ssh/ 内的 id_rsa.pub 公钥和 id_rsa 私钥文件。

更进一步

为了更加的安全,应当修改 ssh 端口,也可以杜绝一些愚笨的穷举请求。

修改 /etc/ssh/sshd_config 文件:

Port 22 # 为了安全我们先保留默认的端口
Port 21112 # 新增端口,建议设置在 10000 以上

配置完成保存之后重启 ssh 服务:

sudo service sshd restart

使用新的端口登录成功之后,就可以修改 /etc/ssh/sshd_congif 文件,删除默认的 22 端口,并重启 ssh 服务。

注意事项

请确保所有操作无误,登录正常之后再断开连接或重启,避免无法登录到服务器。