核心是停用密码登录并启用公私钥认证,同时禁用所有SSH端口转发功能:设置PasswordAuthentication no、PubkeyAuthentication yes、AllowTcpForwarding no、GatewayPorts no、PermitTunnel no、DynamicForward no,并重启sshd服务。

配置服务器密钥认证并禁用代理跳转,核心是两件事:一是彻底停用密码登录、启用公私钥验证;二是阻断 SSH 的端口转发能力(包括本地、远程、动态三种),防止被用作代理跳板。这两步做完,既能保障登录安全,又能消除常见的内网横向渗透路径。
启用密钥认证并禁用密码登录
这是安全基线的第一步。密钥认证本身不等于安全,必须配合禁用密码登录才能真正防暴力破解。
- 在客户端生成强密钥(推荐 Ed25519):
ssh-keygen -t ed25519 -C "admin@server" - 将公钥安全上传到服务器目标用户家目录:
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip - 登录服务器后,编辑
/etc/ssh/sshd_config,确认以下三项已设置:PubkeyAuthentication yesPasswordAuthentication no-
PermitRootLogin no(禁止 root 直接登录)
- 重启服务生效:
sudo systemctl restart sshd,务必先用新密钥测试连通,再退出当前会话
禁用所有 SSH 端口转发功能
端口转发(尤其是动态 SOCKS 代理)是 SSH 被滥用为跳板的核心机制。禁用它们不是“限制使用”,而是从协议层关闭该能力。
- 继续编辑
/etc/ssh/sshd_config,添加或修改以下四行:-
AllowTcpForwarding no(禁用本地/远程端口转发) -
GatewayPorts no(禁止远程端口绑定到非 loopback 地址) -
PermitTunnel no(禁用 SSH 隧道模式,如 point-to-point) -
DynamicForward no(显式禁用动态转发,部分旧版 OpenSSH 需此项)
-
- 保存后重启 sshd,并检查是否生效:
sshd -T | grep -E "(allowtcp|gateway|permit tunnel|dynamic)",输出应全为no - 注意:若服务器本身需作为合法跳板(如运维网关),则不应全局禁用,而应改用
Match User或Match Group做精细化控制
补充加固:限制用户与网络行为
仅靠禁用转发还不够,需配合最小权限原则堵住旁路可能。
- 用
ForceCommand限制特定用户只能执行固定命令(如仅允许 rsync 或备份脚本),杜绝交互式 shell - 通过
AllowUsers或AllowGroups明确放行可登录的账号,避免遗留测试账户 - 配合防火墙(如 ufw 或 firewalld)限制 SSH 端口仅对可信管理网段开放,例如:
ufw allow from 192.168.10.0/24 to any port 22 - 开启登录日志审计:
LogLevel VERBOSE,并确保/var/log/auth.log可被集中收集分析
整个过程不依赖额外工具,全部基于 OpenSSH 原生配置。关键不是“能不能连上”,而是“连上之后能做什么”——把密钥认证和转发禁用绑在一起做,才真正切断代理跳转的链条。

















