Linux服务器安全加固实战:SSH密钥登录、禁用高风险配置与登录审计
第1章|先别急着改配置,先把“入口”看清楚
哈喽兄弟们,今天这期我直接开机演示,目标很明确:把一台 Linux 服务器的 SSH 入口先稳住,再做安全加固。OK so,先登录到你的服务器,执行这几条,先摸清现状:
ss -tlnp | grep sshdsudo sshd -T | egrep 'port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'
你会看到当前 SSH 监听端口、是否允许 root 直接登录、是否还开着密码认证。这里我建议你先别动手改,先开第二个终端或保留云厂商控制台。原因很简单:一旦 SSH 配错,最常见的事故不是“被黑”,而是“把自己锁外面”。
我自己做过一次实测:一台默认 Ubuntu 22.04 新机,root 远程登录 + 密码认证 + 默认 22 端口,用工具扫端口和爆破时,22 端口在几分钟内就能被高频尝试。反过来,改成密钥登录 + 禁止 root + 限制失败次数后,日志里的无效尝试明显下降,风险面直接缩小一大截。
第2章|现在上硬货:SSH 安全加固一步一步做
接下来我按“先加密钥,再关密码,再收紧权限”的顺序来。你可以把下面这套当成 Linux服务器安全加固教程 的标准流程。
- 生成密钥对:在你的本地电脑执行
ssh-keygen -t ed25519 -a 100。这比老旧 RSA 2048 更现代,-a 100会增加密钥派生成本,抗离线破解更强。 - 上传公钥:
ssh-copy-id user@server_ip。如果没有这个命令,就手动把~/.ssh/id_ed25519.pub内容追加到服务器的~/.ssh/authorized_keys。 - 锁定权限:服务器上执行
chmod 700 ~/.ssh和chmod 600 ~/.ssh/authorized_keys,否则 sshd 可能直接拒绝读取。 - 编辑 sshd 配置:打开
/etc/ssh/sshd_config,建议重点看这几项:
PermitRootLogin noPasswordAuthentication noPubkeyAuthentication yesMaxAuthTries 3LoginGraceTime 20AllowUsers yourname
如果你想搜“ssh密钥登录教程”或者“Linux服务器SSH配置怎么用”,重点就是这几行。PermitRootLogin no 直接切断 root 暴露面,PasswordAuthentication no 把弱口令攻击从入口上掐掉。注意:改完先不要重启,先测试配置语法:
sudo sshd -t
无输出代表通过,然后用:
sudo systemctl reload ssh
这一步是平滑加载,不会像重启那样粗暴断连接。Now watch this:你先开一个新终端,用新配置尝试登录;只要密钥成功、密码失败,说明方向对了。
第3章|再加两层保险:端口、审计、暴力破解拦截
很多人一上来就改 SSH 端口,觉得“改了就安全了”。我直接讲真相:改端口只是降噪,不是安全本体。它能减少扫描量,但不能替代密钥登录。你要做的是“组合拳”。
如果你确实要改端口,比如改到 2222,先放行防火墙,再改 SSH 配置,最后验证。Ubuntu/Debian 常见做法:
sudo ufw allow 2222/tcpsudo ufw delete allow 22/tcp
然后在 sshd_config 里改:
Port 2222
再来是 Fail2ban,这个特别适合“免费VPN、油管怎么看、翻墙软件”这类关键词背后常见的公网机器场景——只要你的服务器暴露在公网,就该拦爆破。安装后给 sshd 建一个最小规则:
[sshd]enabled = truemaxretry = 5findtime = 10mbantime = 1h
我在一台 2C2G 的测试机上跑过,启用 Fail2ban 后,连续 5 次失败登录会被封 1 小时,日志里能明显看到封禁记录。你还可以查审计日志:
journalctl -u ssh -n 50 --no-pager
或者 Debian/Ubuntu 看:
sudo tail -n 50 /var/log/auth.log
你会看到谁在尝试登录、用了什么用户名、是密码错还是公钥拒绝。这个信息对排查“为什么 ssh 连不上”特别有用。
第4章|怎么确认真的加固成功了
最后我给你一个三步验收法。第一,确认密钥可登录:
ssh -i ~/.ssh/id_ed25519 user@server_ip
第二,确认密码登录已经失效:用另一个终端故意输错密码,应该直接失败。第三,确认 root 不能直连:
ssh root@server_ip
如果被拒绝,说明 PermitRootLogin no 生效了。再加一条检查命令:
sudo sshd -T | egrep 'permitrootlogin|passwordauthentication|pubkeyauthentication'
只要输出符合你的预期,这套 Linux 服务器安全加固就算真正落地。对了,别忘了留一条云厂商控制台或 VNC 作为“救援入口”,这是很多老司机都不会省掉的保险丝。
如果你想要我下一期继续做“SSH 登录失败排查全流程”或者“Ubuntu 防火墙 UFW 实战”,评论区直接告诉我;如果你更想要一套现成的管理方案,也可以在结尾参考 roxi.cc 里的工具,但免费方案和手工加固本身就完全能用。