Skip to main content

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

排查端口号转发失败

  1. 本地执行命令 ssh -L 0.0.0.0:3011:localhost:8080 lecoo 执行端口号转发, 然后本地访问 localhost:3011
  2. 查看SSH日志文件 /var/log/auth.log, 可使用 sudo tail -f /var/log/auth.log 监控文件内容变化
  3. 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, 注意要检查所有配置项及子目录下的配置项.