首页/系统/Linux 运维命令速查/ssh 端口转发与隧道
网络命令82 条

ssh 端口转发与隧道

ssh 三大转发:-L 本地转发(把远端服务映射到本地)、-R 远程转发(暴露本地端口)、-D 动态 SOCKS5 代理;-N 不执行命令、-f 后台化。

Linux 运维命令速查系统更新于 2026-10-13

ssh 隧道三种型式

ssh 除了登录还能建隧道,三种型式各自解决一类问题:-L 本地转发把远端可达的服务映射到本地端口,-R 远程转发把本地端口暴露到远端,-D 动态转发在本地提供 SOCKS5 代理。-N 表示不执行远程命令(只做转发),-f 让 ssh 转入后台。方向最容易记混,判断方法是看「谁发起、从哪一侧访问」:-L 由本地发起到跳板机,再由跳板机去连目标地址,因此目标地址是站在跳板机视角可达的。

基本信息

适用平台Linux/macOS(OpenSSH 客户端);Windows 10 及以上自带 OpenSSH
命令语法ssh -L 本地地址:本地端口:目标主机:目标端口 用户@跳板机
常用选项-L 本地转发 -R 远程转发 -D 动态 SOCKS -N 不执行命令 -f 后台运行 -C 压缩 -o ServerAliveInterval=30
服务端相关配置GatewayPorts 控制 -R 是否允许外部连接,AllowTcpForwarding 控制是否允许转发
权限说明转发到特权端口需要相应权限,普通用户只能绑定高位端口

典型使用场景

  • 访问内网数据库:把内网 3306 或 5432 映射到本地端口后用本地客户端连接
  • 访问内网页面:把内网 Web 服务映射到本地,用浏览器排查
  • SOCKS 代理:用 -D 让浏览器或下载工具按需访问内网资源
  • 临时演示:用 -R 把本机开发服务暴露给远端同事查看
  • 堡垒机接入:经跳板机访问不具备直接对外访问能力的资产

常用示例

常用示例
ssh -N -L 5432:127.0.0.1:5432 ops@db-bastion    # 本地 5432 映射到跳板机视角的 5432
ssh -N -L 8080:10.0.0.9:80 ops@gateway           # 目标是跳板机网络里的 10.0.0.9
ssh -f -N -D 1080 ops@jump                       # 本地 SOCKS5 代理
ssh -R 9000:127.0.0.1:3000 ops@public            # 把本机 3000 暴露到远端 9000
ssh -o ServerAliveInterval=30 -N -L 3306:db:3306 ops@bastion
ps -ef | grep 'ssh -N' | grep -v grep             # 查找已建立的隧道

三种转发对照

选项方向典型用途
-L 本地转发本地端口指向跳板机可达的目标访问内网数据库或内网页面
-R 远程转发把本地端口暴露给远端临时对外演示本机服务
-D 动态转发本地提供 SOCKS5 代理浏览器或工具按需访问内网
-N 与 -f只转发不执行命令,并转入后台纯隧道场景的常用组合
-L 的目标地址是站在跳板机视角可达的地址,不是本地可达的地址。把目标写成只有本机能访问的地址会导致连接失败。
隧道默认只监听 127.0.0.1。要让其他人连接需要显式指定监听地址或开启 GatewayPorts,这等于开放一个新入口,务必先做安全评估。

易错点

  • 把 -L 的目标地址写成只有本机能访问的地址,导致连接失败
  • 默认只监听本机回环地址,想让他人连接却以为已经开放
  • 未设置 ServerAliveInterval,网络波动后隧道静默失效,表现为连接超时
  • 服务端 AllowTcpForwarding 被禁用时隧道无法建立,需要管理员调整策略

数据来源与参考

  • man 1 ssh(OpenSSH 手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌