Linux SSH安全需四步:禁用密码登录强制密钥认证;修改默认端口并限制用户/IP访问;部署Fail2ban防暴力破解;精简权限、开启详细日志并审计。

Linux SSH 安全不是靠一两个设置就能搞定的,核心是“减少攻击面 + 增加验证门槛 + 及时发现异常”。下面这些实践,都是生产环境反复验证过的硬核操作,不花哨、不绕弯,直接上手就能见效。
禁用密码登录,强制使用密钥认证
密码登录是暴力破解的主入口,关掉它是最有效的一道防线。启用密钥登录后,攻击者即使知道用户名,没有私钥也进不来。
- 生成密钥对(本地执行):
ssh-keygen -t ed25519 -C "your_email@example.com"(推荐 ed25519,比 rsa 更快更安全) - 上传公钥到服务器:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip - 编辑
/etc/ssh/sshd_config,确认以下几行已设置:
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
改完记得重启服务:sudo systemctl restart sshd,并**先保留一个已登录的终端窗口**,避免被踢出后连不上。
修改默认端口 + 限制登录用户/IP
虽然“安全靠隐蔽”不绝对,但把 SSH 改到非 22 端口,能过滤掉 90% 的自动扫描流量;再配合用户和 IP 白名单,攻击面直接缩小好几个量级。
- 改端口:在
/etc/ssh/sshd_config中取消注释并修改Port 2222(比如设为 2222 或其他 1024–65535 间未被占用的端口) - 只允许特定用户登录:
AllowUsers deploy admin(多个用户空格分隔) - 只允许内网或固定 IP 访问:
AllowUsers deploy@192.168.1.*或AllowUsers deploy@203.123.45.67
改完端口后,别忘了更新防火墙规则(如 ufw 或 iptables),放行新端口,同时封掉旧的 22 端口。
启用 Fail2ban 防暴力破解
即使禁了密码登录,SSH 服务本身仍可能被探测或误配置暴露。Fail2ban 能实时监控日志,自动封禁频繁失败的 IP,是低成本高回报的防御补充。
- 安装:
sudo apt install fail2ban(Debian/Ubuntu)或sudo yum install fail2ban(CentOS/RHEL) - 启用默认 SSH 规则:复制模板
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local,确保[sshd]段中enabled = true - 常用调优项(写在
jail.local中):
maxretry = 3
bantime = 1h
findtime = 10m
启动服务:sudo systemctl enable fail2ban && sudo systemctl start fail2ban,可用 sudo fail2ban-client status sshd 查看状态。
精简 SSH 服务权限与日志审计
最小权限原则同样适用于 SSH:不用的功能关掉,不该留的日志删掉,该留的必须可追溯。
- 禁用危险选项(在
sshd_config中设为no):PermitRootLogin no、X11Forwarding no、AllowTcpForwarding no(除非真需要) - 开启详细登录日志:
LogLevel VERBOSE(记录 key fingerprint 和认证方式,便于事后排查) - 定期轮转和审查日志:
/var/log/auth.log(Debian)或/var/log/secure(RHEL),关注Failed password、Invalid user、Connection closed等关键词
建议搭配 logwatch 或简单脚本每日邮件摘要关键事件,早发现、早响应。
基本上就这些——不复杂,但容易忽略。做完这四步,你的 SSH 就已经脱离“裸奔”状态,进入可控、可管、可审计的安全基线。后续再叠加多因素(如 Google Authenticator)、跳板机或证书体系,就是更上一层的事了。










