Linux服务器设置密钥登录、禁用密码登录

要管理服务器,我们就必须远程登录来传递指令,而黑客拥有和我们一样的需求。如何用最短的时间控制尽量多的服务器,以便获取经济利益呢?

黑客们不可能一台一台接一台地攻破,一方面没有那么多的时间和精力,另一方面,现在的系统和软件安全性越来越高,大部分服务器的漏洞其实是用户本身。这些黑客们通过脚本和程序大规模地扫描,使用密码字典穷举破解,从而获取大量“肉鸡”。

为什么要设置密钥登录

如何避免服务器成为黑客们的“肉鸡”,单从服务器的设置来考虑:

  1. 使用复杂且较长的密码,增加字典穷举的难度;
  2. 使用普通账户,禁止 Root 用户远程登录。

假设使用的密码正好是与某个网络密码相同,而这个密码不小心泄露了,那么以上方案不一定能够把黑客阻挡在门外。我们有一个更安全、更便捷的方法——SSH 密钥。

本文以阿里云 ECS 为例,创建密钥有 3 种方式:

  • 通过 ECS 后台创建
  • 登录服务器创建,再下载私钥到本地
  • 本地创建密钥,再推送公钥到服务器

我们推荐使用第三种方法,一方面避免下载密钥的麻烦,另一方面,无论 Linux、MacOS 还是 Windows 都自带 SSH 功能,无需任何第三方软件,可以很方便地进行设置。

本地系统以用户最多的 Windows 为例。

创建密钥

为了彰显 Windows 系统的生产力属性,同时与 Linux 接轨,微软近年来坚持推广并开源 PowerShell,在目前推送的系统版本中,PowerShell 已经替代 CMD 成为默认终端。

按 Win + R 打开运行窗口,输入 PowerShell 并回车,在终端窗口中输入:

ssh-keygen

输入密钥存放路径,默认在当前用户的 .ssh 文件夹下,按回车即可。

接着输入私钥密码,任何需要调用私钥的情景下都需要输入密码,避免私钥被盗用。如果希望实现无密码登录,此处应留空。

出现以下提示即创建成功:

推送公钥,允许密钥登录

如果没有修改存放位置,密钥文件就会保存在当前用户目录的 .ssh 文件夹下,里面包含私钥和公钥,以 .pub 结尾的就是公钥文件,我们要把它推送到服务器上。

ssh-copy-id -i ~/.ssh/id_rsa.pub xxx@host

上面代码中的 id_rsa.pub 是公钥文件,xxx 是 ECS 服务器的用户名(希望用密钥登录哪个用户就写哪个用户名),host 是服务器 IP 地址。如果修改过 SSH 的端口,还应该在结尾添加 -p 端口号

接着输入用户密码,很快就会看到上传成功的提示。此时可以试试以下命令,看是否跳过输密码的步骤,直接登录成功:

ssh xxx@host

如果依旧要求输入密码,那就需要检查服务器上的 /etc/ssh/sshd_config 文件,正确设置如下:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

修改后需运行 service sshd restart 来重启 SSH 服务。还未解决的话则需要修改用户目录权限:

chmod 755 /home/xxx

禁止密码登录

确认密钥能够登录成功之后,我们需要把密码登录禁止,否则就失去使用密钥的安全意义。

依旧编辑 ECS 上的 /etc/ssh/sshd_config 文件,取消密码验证:

PasswordAuthentication no

运行 service sshd restart 重启 SSH 服务使之生效,使用密码登录服务器就会收到 deny 提示:Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可

发表评论

电子邮件地址不会被公开。 必填项已用*标注