Skip to content
VDS · 安全

加固 SSH:密钥、端口、限制

如何配置 sshd:仅用密钥登录、限制用户和地址、更改端口,以及在此过程中如何不丢失访问权限。

更新于 2026年8月23日

SSH 是您每天使用的机器的唯一入口,也是自动化暴力破解攻击的主要目标。只需配置一次,之后便无需再操心。

所有修改都放在单独的文件 /etc/ssh/sshd_config.d/99-hardening.conf 中——这样软件包更新就不会覆盖您的配置,导致您失去访问权限。

用密钥代替密码

PasswordAuthentication no
PubkeyAuthentication yes
KbdInteractiveAuthentication no
PermitEmptyPasswords no

应用之前,请确认密钥确实可用:在另一个窗口中用密钥登录。在 /hosting/vds/m/<id> 面板的“Access”标签页中添加的密钥会分配给 root 用户;其他用户需要手动将密钥写入 ~/.ssh/authorized_keys。

在您本地生成密钥:

ssh-keygen -t ed25519 -C "work laptop"

ed25519 比 RSA 更短、更快。如果您的工具不支持它,请使用长度至少为 4096 位的 rsa。

谁可以登录

PermitRootLogin prohibit-password
AllowUsers artem deploy
MaxAuthTries 3
LoginGraceTime 20
ClientAliveInterval 300
ClientAliveCountMax 2

AllowUsers 是禁用密码之后最有效的规则:针对其他用户名的暴力破解会立即停止。关于 root 的更多内容——禁用 root 密码登录。

如果您从固定位置工作,可以限制地址:

Match Address 203.0.113.5
    PermitRootLogin yes

更改端口

将 SSH 从 22 端口迁移到非标准端口并不能保护您免受针对性攻击,但可以消除日志中几乎所有来自自动化扫描器的噪音。

Port 2222

步骤顺序严格如下:

ufw allow 2222/tcp
sshd -t
systemctl restart ssh
ssh -p 2222 artem@<address>
ufw delete allow 22/tcp

防火墙规则要在重启之前添加,而删除旧规则只能在通过新端口成功登录之后进行。另请参阅端口。

应用与验证

sshd -t
sshd -T | grep -Ei "passwordauth|permitroot|allowusers|port"
systemctl restart ssh

sshd -t 检查语法,sshd -T 显示最终生效的配置——是生效的配置,而不是您在文件中写的内容。

配置期间请保持当前会话开启。它能在 sshd 重启后继续存活,您可以通过它回滚失败的修改。如果您真的把自己锁在外面了——面板中的“Console”标签页独立于 SSH 运行。

常见错误

错误后果解决方法
未测试密钥就禁用了密码完全失去网络访问通过面板控制台登录并恢复设置
在主文件中修改,覆盖了 sshd_config.d 中的某行设置不生效用 sshd -T 检查
更改了端口却没有 ufw 规则失去访问权限先加规则,再改端口
~/.ssh 的权限比 700 更宽松密钥被静默忽略chmod 700 ~/.ssh、chmod 600 authorized_keys
AllowUsers 中没有包含自己的用户名把自己锁在外面面板控制台,编辑文件

在 sshd_config 中,参数的首次出现生效,而 sshd_config.d 中的文件会在开头被包含进来。因此请用 sshd -T 验证结果,而不是直接阅读文件。

fail2ban 可以消除剩余的暴力破解噪音。