首页 > Technology > 正文

Linux SSH 安全加固完整指南

fenij 2026-07-31 84 Technology

SSH 是管理 Linux 服务器的主要通道,也是最常被攻击的入口之一。默认配置下 SSH 监听 22 端口、允许 root 密码登录,等于在公网上挂了一个「请进」的牌子。下面这套加固方案能有效降低被爆破的风险。

SSH 安全加固清单

建议 配置位置
端口 改非 22 /etc/ssh/sshd_config Port
禁止 root 登录 PermitRootLogin no sshd_config
禁止密码登录 PasswordAuthentication no sshd_config
限制用户 AllowUsers xxx sshd_config
密钥算法 ed25519 ssh-keygen -t ed25519
22
默认端口最容易被扫
🔧
fail2ban
封暴力破解 IP
📊
密钥
比密码安全 100 倍

1. 创建普通用户并禁用 root 登录

不要用 root 直接登录。先创建一个普通用户并加入 sudo 组:

adduser deploy
usermod -aG sudo deploy

编辑 /etc/ssh/sshd_config

PermitRootLogin no

2. 使用密钥登录,禁用密码

密钥比密码安全得多,而且不会被字典爆破。本地生成密钥:

ssh-keygen -t ed25519 -C "your_email@example.com"

复制公钥到服务器:

ssh-copy-id deploy@your-server-ip

然后关闭密码登录:

PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no

3. 修改 SSH 端口

把默认 22 改成高位端口,减少自动化扫描噪音:

Port 2222

改完后重启 SSH:

sudo systemctl restart sshd

注意:保留当前会话,另开一个终端测试新端口能登录成功再退出。

4. 限制可登录用户

AllowUsers deploy

这样即使服务器上有其他用户,也不能通过 SSH 登录。

5. 关闭不必要功能

# 禁用 X11 转发
X11Forwarding no

# 禁止空密码
PermitEmptyPasswords no

# 减少空闲连接时间
ClientAliveInterval 300
ClientAliveCountMax 2

6. 使用 Fail2ban 做动态防护

即使改了端口,定向扫描仍然可能发生。Fail2ban 能自动封禁多次失败的 IP:

[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600

Fail2ban 的完整配置参考 Fail2ban 暴力破解防护完整配置指南

7. 验证配置

改完配置后,先检查语法:

sudo sshd -t

没问题再重载:

sudo systemctl reload sshd

如果 reload 后连不上,sshd 会保留旧配置继续运行,你还有救。

SSH 加固清单

配置项 推荐值
Port 高位端口,如 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers 只允许的管理用户
X11Forwarding no
ClientAliveInterval 300

更多服务器安全教程,请访问 fenij.com

常见问题

问:改了端口被锁在外面怎么办?
答:如果是云服务器,用控制台提供的 VNC/串口登录。如果是物理机,需要本地接显示器键盘。所以改端口前务必测试新端口可用。

问:密钥登录比密码登录安全多少?
答:ED25519 密钥的熵远超任何可记忆的密码,而且不会被字典攻击。只要保管好私钥文件,安全性提升是数量级的。

问:Team 里多人管理服务器怎么办?
答:给每个人都创建独立的用户和密钥,不要共享同一个 deploy 用户。用 AllowUsers user1 user2 控制。

🔗 延伸阅读

SSH 之外给账户设强密码,可用随机密码生成器

排错自查清单

  • ☐ SSH 安全加固清单
  • ☐ 1. 创建普通用户并禁用 root 登录:不要用 root 直接登录。先创建一个普通用户并加入 sudo 组:
  • ☐ 2. 使用密钥登录,禁用密码:密钥比密码安全得多,而且不会被字典爆破。本地生成密钥:
  • ☐ 3. 修改 SSH 端口:把默认 22 改成高位端口,减少自动化扫描噪音:
  • ☐ 4. 限制可登录用户:AllowUsers deploy 这样即使服务器上有其他用户,也不能通过 SSH 登录。
  • ☐ 5. 关闭不必要功能
  • ☐ 6. 使用 Fail2ban 做动态防护:即使改了端口,定向扫描仍然可能发生。Fail2ban 能自动封禁多次失败的 IP:
  • ☐ 7. 验证配置:改完配置后,先检查语法:
  • ☐ SSH 加固清单:更多服务器安全教程,请访问 fenij.com。
  • ☐ 常见问题:问:改了端口被锁在外面怎么办? 答:如果是云服务器,用控制台提供的 VNC/串口登录。如果是物理机,需要本地接

关键命令速查

  • adduser deploy usermod -aG sudo deploy
  • PermitRootLogin no
  • ssh-keygen -t ed25519 -C "your_email@example.com"
  • ssh-copy-id deploy@your-server-ip
  • PasswordAuthentication no PubkeyAuthentication yes ChallengeResponseAuthentication no
  • Port 2222

相关延伸

更系统的排查思路,见 Technology 分类归档

相关完整手册

系统化的排查与配置思路,建议顺手收藏这几篇完整手册: