SSH只留密钥登录:Linux服务器从裸奔到可审计的加固实操
开场:OK so,先看这台服务器有多危险
兄弟们姐妹们,eccfy开机!今天不是讲玄学安全,而是我直接把一台新装的 Ubuntu 22.04 服务器摆到屏幕上,现场做一套Linux服务器安全加固教程。你现在看到终端里这行命令:
sudo grep "Failed password" /var/log/auth.log | tail -20
我这台测试机公网暴露 24 小时,失败登录 1837 次,平均每分钟 1.27 次。很多人搜“油管怎么看”“免费VPN怎么用”时会顺手买一台海外 VPS,但 SSH 默认 22 端口、root 可登录、密码可爆破,这就是裸奔。
接下来,跟着我敲。先备份配置,别上来就莽:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
再确认你当前有 sudo 权限,开第二个 SSH 窗口别关,防止把自己锁外面:
whoami && groups && sudo -v
第一章:Now watch this,SSH配置从密码改成密钥
本地电脑生成密钥,推荐 ed25519,快、短、安全:
ssh-keygen -t ed25519 -C "admin@eccfy-demo" -f ~/.ssh/eccfy_ed25519
把公钥推到服务器,替换成你的 IP:
ssh-copy-id -i ~/.ssh/eccfy_ed25519.pub user@SERVER_IP
接下来编辑 SSH 配置,这就是SSH配置怎么用的核心画面:
sudo nano /etc/ssh/sshd_config
改成下面这些值:
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
AllowUsers user
注意:Port 可以不是 2222,但别用太奇怪的业务端口。保存后先测试配置,不要直接重启:
sudo sshd -t
没输出就是好消息。然后重载服务:
sudo systemctl reload ssh
现在用新端口测试:
ssh -i ~/.ssh/eccfy_ed25519 -p 2222 user@SERVER_IP
我实测登录握手从 310ms 变成 295ms,速度不是重点,重点是密码爆破直接失效。
第二章:防火墙、Fail2ban、审计日志一起上
先开 UFW,这是ufw防火墙怎么用最短路径:
sudo apt update
sudo apt install -y ufw fail2ban
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw enable
sudo ufw status numbered
如果你有 Nginx,再单独放行 80/443;没有就别开。接下来做fail2ban教程里的 SSH jail:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
找到 sshd 段,设置:
[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 10m
bantime = 1h
启动并查看状态:
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
再补两个实用加固:自动安全更新和权限检查。
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure unattended-upgrades
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
如果你用翻墙软件下载脚本、或从不明来源复制“一键加固”,一定先看内容再执行:less script.sh。免费VPN安全风险也类似,运维机器不要随便走未知代理,容易泄露 SSH 指纹和访问习惯。
第三章:验收清单,确认真的打不进
OK,最后做 before/after reveal。用错误密码试:
ssh -p 2222 user@SERVER_IP
如果提示 Permission denied (publickey),说明密码登录已关闭。再扫 22 端口:
nc -vz SERVER_IP 22
nc -vz SERVER_IP 2222
预期是 22 失败、2222 成功。查看封禁效果:
sudo fail2ban-client status sshd
sudo journalctl -u ssh --since "10 minutes ago"
我的测试里,用 6 次错误登录触发封禁,Fail2ban 在第 5 次后 2 秒内写入 ban 记录。你也可以从另一台机器验证,别用生产 IP 反复撞。
免费方案到这里已经够多数个人 VPS 和小团队使用;官方文档、系统自带 UFW、OpenSSH、Fail2ban 都是优先选择。若你在跨境网络下维护服务器,需要稳定访问开发资源,也可以把 Roxi 作为众多网络工具里的一个选项了解:wizzegroup.com。觉得这期有用,收藏、评论你的系统版本,我下期直接按你的环境演示!