在 CentOS 上开启 SSH 转发(通常指 SSH 端口转发 / 隧道),可以从服务端配置和客户端使用两方面来看。下面按常见场景说明。
编辑配置文件:
sudo vi /etc/ssh/sshd_config
确保以下参数(按需开启):
AllowTcpForwarding yes
GatewayPorts yes # 允许远程端口转发对外监听(可选)
X11Forwarding yes # 如果需要 X11 转发
AllowTcpForwarding默认一般是yes
CentOS 7 / 8 / Stream:
sudo systemctl restart sshd
CentOS 6(老版本):
sudo service sshd restart
场景:把本地端口转发到远程内部服务
ssh -L 本地端口:目标IP:目标端口 用户@服务器IP
示例(本地 8080 → 服务器内网 192.168.1.10:80):
ssh -L 8080:192.168.1.10:80 user@centos-server
本地访问:
http://127.0.0.1:8080
场景:把远程服务器端口转发到本地服务
ssh -R 远程端口:本地IP:本地端口 用户@服务器IP
示例(服务器 8888 → 本地 127.0.0.1:80):
ssh -R 8888:127.0.0.1:80 user@centos-server
远程访问:
http://服务器IP:8888
⚠️ 需要在服务端开启 GatewayPorts yes
场景:科学上网 / 内网穿透
ssh -D 1080 user@centos-server
浏览器设置 SOCKS5:
127.0.0.1:1080
ssh -N -f -L 8080:192.168.1.10:80 user@centos-server
参数说明:
-N:不执行远程命令-f:后台运行| 问题 | 原因 |
|---|---|
| 转发无效 | AllowTcpForwarding no |
| 远程无法访问 | 未开 GatewayPorts |
| 连接被拒绝 | 防火墙未放行端口 |
| SELinux 限制 | 可临时 setenforce 0 测试 |
防火墙示例:
sudo firewall-cmd --add-port=8888/tcp --permanent
sudo firewall-cmd --reload
如果你指的是 SSH 代理转发(Agent Forwarding) 或 X11 转发,可以告诉我具体用途,我可以给你更精确的配置。