先说结论:禁用 SSH 隧道功能的核心在于服务端配置,客户端命令无法绕过服务端的限制策略。
- 先判断:确认业务是否依赖 SSH 转发,避免误伤正常运维流程。
- 优先做:修改/etc/ssh/sshd_config,设置 AllowTcpForwarding no 等关键参数。
- 再验证:保留当前会话,新开终端尝试隧道连接,确认被拒绝后再关闭旧会话。
- 留后路:操作前确保拥有服务器控制台(VNC/物理机)访问权限,以防配置错误导致无法远程登录。
核心配置参数
以下是需要添加到或修改为 no 的关键配置项,执行后需重启 sshd 服务。
AllowTcpForwarding no GatewayPorts no PermitTunnel no X11Forwarding no
若需针对特定用户或 IP 开放转发权限,可使用 Match 块进行细粒度控制,而非全局开启:
Match User deploy_user
AllowTcpForwarding yes
PermitTunnel no操作步骤
1. 备份配置文件:修改前务必备份,防止配置错误导致无法登录。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
2. 编辑配置:使用 vim 或 nano 打开配置文件,找到或添加以下行。
sudo vim /etc/ssh/sshd_config
3. 确认参数:确保以下参数设置为 no,注意不要保留 yes 的注释行。
- AllowTcpForwarding no:禁用所有 TCP 端口转发。
- GatewayPorts no:防止远程转发绑定到非本地地址。
- PermitTunnel no:禁用点对点隧道设备。
- X11Forwarding no:关闭图形界面转发。
4. 检查语法并重启:使用 sshd -t 检查配置语法,无误后重启服务。
sudo sshd -t sudo systemctl restart sshd
验证方法
在另一台机器或当前机器的新终端中,尝试发起一个端口转发请求。例如尝试远程转发:
ssh -R 8080:localhost:22 user@your-server
如果配置生效,连接后会收到类似 Warning: remote port forwarding failed for listen port 8080 的提示,或者连接直接断开,且服务端没有监听相应端口。
紧急恢复方案
若配置错误导致 SSH 服务无法启动或拒绝所有连接,请按以下步骤恢复:
- 使用控制台登录:通过云服务商提供的 VNC 控制台或物理机直接登录服务器,不受 SSH 服务状态影响。
- 还原配置文件:将备份的配置覆盖回去。
- 重启服务:恢复配置后重启 SSH 服务。
- 重新验证:确认 SSH 远程登录恢复正常后,再重新尝试修改配置。
sudo cp /etc/ssh/sshd_config.bak /etc/ssh/sshd_config
sudo systemctl restart sshd
常见风险与注意
- 不要直接关闭当前会话:修改配置并重启服务前,务必保留一个已登录的终端窗口,确认新配置不会导致无法登录后再退出。
- 客户端配置无效:客户端的 ssh_config 或命令行参数无法开启服务端已禁用的功能,加固重点永远在服务端。
- 防火墙配合:仅关闭 SSH 转发不够,建议配合防火墙限制 SSH 端口的访问来源 IP,减少暴露面。
- 语法检查必做:重启前必须执行 sshd -t,若有报错切勿重启,否则可能导致服务无法启动。