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,这等于开放一个新入口,务必先做安全评估。