公众号旧文

哪吒面板漏洞之后,我关掉了 SSH 密码登录

作者:胖子阅读 —

哪吒监控爆出高危漏洞,不少站长和 VPS 用户都开始检查自己的服务器。

虽然我并没有直接受到影响,但这件事还是让我意识到了问题。

我的服务器一直允许 SSH 密码登录。

平时觉得没什么,毕竟密码设置得很复杂。

但仔细想想,如果密码泄露了呢?

如果密码被暴力破解了呢?

如果哪天自己不小心把密码保存到不安全的地方呢?

于是我决定把一直拖着没做的事情完成:

开启 SSH Key 登录,关闭 SSH 密码登录。

以前我一直觉得 SSH Key 很复杂。

什么公钥、私钥,总是看得云里雾里。

这次实际操作后才发现,原理很简单:

  • 私钥放自己电脑上
  • 公钥放服务器上
  • 登录时服务器验证私钥是否匹配
  • 匹配就允许登录

整个过程中,私钥不会发送到服务器。

我使用 SecureCRT 自带的工具生成了一对 ED25519 密钥。

图片

生成后得到两个文件:

Identity
Identity.pub

其中 Identity 是私钥,Identity.pub 是公钥。

然后把公钥添加到服务器的:

~/.ssh/authorized_keys

文件中。

配置好之后,我成功使用 SSH Key 登录服务器。

随后修改 SSH 配置:

PubkeyAuthentication yes
PasswordAuthentication no

重新加载 SSH 服务后,再检查:

sshd -T | grep passwordauthentication

输出:

passwordauthentication no

说明密码登录已经被关闭。

我还测试了一下,当客户端没有配置私钥时,服务器直接返回:

root@100.64.0.4: Permission denied (publickey).
Connection failed!
Connection closed
Press any key to continue . . .

这说明服务器已经不再接受密码认证。

至此,我的 VPS 已经从密码登录变成了 SSH Key 登录。

哪吒面板漏洞让我意识到,真正重要的安全措施并不复杂。

与其等出事之后再补救,不如花半小时把最基础的 SSH 安全配置做好。

对于拥有 VPS 的朋友来说,如果还在使用密码登录,我觉得值得找个时间试试 SSH Key 登录。

配置完成之后,你会发现比密码更安全,也更方便。

附:常见 SSH 密钥默认存放位置

Linux(OpenSSH)

生成命令:ssh-keygen -t ed25519

默认位置:

~/.ssh/id_ed25519        私钥
~/.ssh/id_ed25519.pub    公钥

例如:

/root/.ssh/id_ed25519
/root/.ssh/id_ed25519.pub

或:

/home/user/.ssh/id_ed25519
/home/user/.ssh/id_ed25519.pub

服务器授权公钥文件:

~/.ssh/authorized_keys
Windows 自带 OpenSSH

Windows 10 / Windows 11 默认位置:

C:\Users\用户名\.ssh\id_ed25519
C:\Users\用户名\.ssh\id_ed25519.pub

例如:

C:\Users\ABCD\.ssh\id_ed25519
C:\Users\ABCD\.ssh\id_ed25519.pub

OpenSSH 会自动读取这里的私钥。

因此:

ssh root@服务器IP

通常不需要额外指定私钥路径。
SecureCRT

SecureCRT 可以通过图形界面生成密钥:

Tools → Create Public Key

生成后的文件名称和保存位置可以自定义。

例如:

C:\Users\ABCD\Documents\Identity
C:\Users\ABCD\Documents\Identity.pub

其中:

Identity        私钥
Identity.pub    公钥

SecureCRT 不要求固定路径。
只需要在 Session 配置中指定私钥文件即可。

一句话总结

服务器保存公钥(authorized_keys)
客户端保存私钥(id_ed25519 / Identity)

谁拥有对应的私钥,谁就能通过 SSH Key 登录服务器。