SSH 端口号转发
· 5 min read
SSH 端口转发命令详解
SSH 端口转发分为三种类型:本地转发、远程转发和动态转发。
1. 本地端口转发(Local Port Forwarding)
将本地端口的数据通过 SSH 隧道转发到远程服务器。
基本语法
ssh -L [本地IP:]本地端口:目标主机:目标端口 用户名@跳板机
常用示例
示例1:访问远程服务器的数据库
# 将本地 3306 端口转发到远程服务器的 MySQL(3306)
ssh -L 3306:localhost:3306 alan@lecoo
# 然后本地可以连接:mysql -h 127.0.0.1 -P 3306
示例2:通过跳板机访问内网服务
# 通过跳板机 lecoo 访问内网 web 服务器(192.168.1.100:80)
ssh -L 8080:192.168.1.100:80 alan@lecoo
# 本地浏览器访问:http://localhost:8080
示例3:绑定到所有网络接口
# 允许其他机器访问本地的转发端口
ssh -L 0.0.0.0:8080:localhost:80 alan@lecoo
2. 远程端口转发(Remote Port Forwarding)
将远程服务器的端口转发到本地或其他机器。
基本语法
ssh -R 远程端口:目标主机:目标端口 用户名@远程服务器
常用示例
示例1:让远程服务器访问本地服务
# 远程服务器访问本地 80 端口服务
ssh -R 8080:localhost:80 alan@lecoo
# 在远程服务器上:curl http://localhost:8080
示例2:内网穿透(让外网访问内网服务)
# 将本地 web 服务暴露给公网服务器
ssh -R 8888:localhost:3000 user@public-server.com
# 公网用户访问:http://public-server.com:8888
3. 动态端口转发(Dynamic Port Forwarding)
创建 SOCKS 代理,动态转发所有协议。
基本语法
ssh -D [本地IP:]本地端口 用户名@远程服务器
常用示例
示例1:创建 SOCKS5 代理
# 创建 SOCKS5 代理在本地 1080 端口
ssh -D 1080 alan@lecoo
# 配置浏览器使用 SOCKS5 代理:127.0.0.1:1080
示例2:绑定到所有接口
ssh -D 0.0.0.0:1080 alan@lecoo
4. 高级组合选项
开启压缩(提高性能)
ssh -C -L 8080:localhost:80 alan@lecoo
后台运行
ssh -f -N -L 8080:localhost:80 alan@lecoo
# -f: 后台运行
# -N: 不执行远程命令
保持连接活跃
ssh -o ServerAliveInterval=60 -L 8080:localhost:80 alan@lecoo
同时使用多个转发
ssh -L 8080:localhost:80 -L 3306:localhost:3306 -D 1080 alan@lecoo
6. 使用配置文件(~/.ssh/config)
在配置文件中设置转发:
Host lecoo
HostName 192.168.1.107
User alan
LocalForward 8080 localhost:80
LocalForward 3306 localhost:3306
DynamicForward 1080
Compression yes
ServerAliveInterval 60
然后只需:
ssh lecoo
7. 常用参数速查
| 参数 | 说明 |
|---|---|
-L | 本地端口转发 |
-R | 远程端口转发 |
-D | 动态端口转发(SOCKS代理) |
-f | 后台运行 |
-N | 不执行远程命令 |
-C | 启用压缩 |
-g | 允许远程主机连接转发端口 |
-v | 详细输出(调试用) |
-p | 指定 SSH 端口 |
8. 调试端口转发
使用详细模式查看连接状态
ssh -v -L 8080:localhost:80 alan@lecoo
# 使用 -vvv 获取更详细信息
ssh -vvv -D 1080 alan@lecoo
查看端口占用
# Linux/macOS
netstat -tlnp | grep 8080
lsof -i :8080
# Windows
netstat -ano | findstr 8080
排查端口号转发失败
- 本地执行命令
ssh -L 0.0.0.0:3011:localhost:8080 lecoo执行端口号转发, 然后本地访问localhost:3011 - 查看SSH日志文件
/var/log/auth.log, 可使用sudo tail -f /var/log/auth.log监控文件内容变化 - SSH配置文件
/etc/ssh/sshd_config和目录/etc/ssh/sshd_config.d/
如果日志显示类似这种日志 2026-07-21T21:20:08.436499+08:00 lecoo sshd[2465243]: refused local port forward: originator 127.0.0.1 port 55609, target localhost port 5556 表示端口号转发被禁用,需要修改 SSH 对应配置文件, 检查配置项 AllowTcpForwarding yes 是否设置成了 yes, 注意要检查所有配置项及子目录下的配置项.