首页 / 服务器运维 / Linux服务器安全加固实战:SSH

Linux服务器安全加固实战:SSH密钥登录、禁用高风险配置与登录审计

Roxi
Roxi 加速器 — 稳定·快速·安全
全球节点覆盖,支持所有主流平台,一键连接无需配置。新用户免费试用。
立即体验 →

第1章|先别急着改配置,先把“入口”看清楚

性价比88易用性82稳定性95安全性90客服75

哈喽兄弟们,今天这期我直接开机演示,目标很明确:把一台 Linux 服务器的 SSH 入口先稳住,再做安全加固。OK so,先登录到你的服务器,执行这几条,先摸清现状:

ss -tlnp | grep sshd
sudo sshd -T | egrep 'port|permitrootlogin|passwordauthentication|pubkeyauthentication|maxauthtries'

你会看到当前 SSH 监听端口、是否允许 root 直接登录、是否还开着密码认证。这里我建议你先别动手改,先开第二个终端或保留云厂商控制台。原因很简单:一旦 SSH 配错,最常见的事故不是“被黑”,而是“把自己锁外面”。

我自己做过一次实测:一台默认 Ubuntu 22.04 新机,root 远程登录 + 密码认证 + 默认 22 端口,用工具扫端口和爆破时,22 端口在几分钟内就能被高频尝试。反过来,改成密钥登录 + 禁止 root + 限制失败次数后,日志里的无效尝试明显下降,风险面直接缩小一大截。

第2章|现在上硬货:SSH 安全加固一步一步做

接下来我按“先加密钥,再关密码,再收紧权限”的顺序来。你可以把下面这套当成 Linux服务器安全加固教程 的标准流程。

  1. 生成密钥对:在你的本地电脑执行 ssh-keygen -t ed25519 -a 100。这比老旧 RSA 2048 更现代,-a 100 会增加密钥派生成本,抗离线破解更强。
  2. 上传公钥:ssh-copy-id user@server_ip。如果没有这个命令,就手动把 ~/.ssh/id_ed25519.pub 内容追加到服务器的 ~/.ssh/authorized_keys。
  3. 锁定权限:服务器上执行 chmod 700 ~/.ssh 和 chmod 600 ~/.ssh/authorized_keys,否则 sshd 可能直接拒绝读取。
  4. 编辑 sshd 配置:打开 /etc/ssh/sshd_config,建议重点看这几项:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 20
AllowUsers yourname

如果你想搜“ssh密钥登录教程”或者“Linux服务器SSH配置怎么用”,重点就是这几行。PermitRootLogin no 直接切断 root 暴露面,PasswordAuthentication no 把弱口令攻击从入口上掐掉。注意:改完先不要重启,先测试配置语法:

sudo sshd -t

无输出代表通过,然后用:

sudo systemctl reload ssh

这一步是平滑加载,不会像重启那样粗暴断连接。Now watch this:你先开一个新终端,用新配置尝试登录;只要密钥成功、密码失败,说明方向对了。

第3章|再加两层保险:端口、审计、暴力破解拦截

Q1需求调研Q2产品开发Q3内测上线Q4全面推广

很多人一上来就改 SSH 端口,觉得“改了就安全了”。我直接讲真相:改端口只是降噪,不是安全本体。它能减少扫描量,但不能替代密钥登录。你要做的是“组合拳”。

如果你确实要改端口,比如改到 2222,先放行防火墙,再改 SSH 配置,最后验证。Ubuntu/Debian 常见做法:

sudo ufw allow 2222/tcp
sudo ufw delete allow 22/tcp

然后在 sshd_config 里改:

Port 2222

再来是 Fail2ban,这个特别适合“免费VPN、油管怎么看、翻墙软件”这类关键词背后常见的公网机器场景——只要你的服务器暴露在公网,就该拦爆破。安装后给 sshd 建一个最小规则:

[sshd]
enabled = true
maxretry = 5
findtime = 10m
bantime = 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 里的工具,但免费方案和手工加固本身就完全能用。