SSH 隧道是什么
只有跳板机可达内网时,用 SSH 隧道把内网服务映射出来,比直接把端口暴露到公网安全。本地转发适合单个服务(数据库、管理控制台),动态转发建立本地 SOCKS 代理,适合批量访问内网 Web 或让浏览器走代理。
基本信息
| 场景 | 通过跳板机访问内网服务 |
|---|---|
| 组合方式 | 本地转发、动态 SOCKS 代理、配合 curl 的代理参数 |
| 常用选项 | 不执行远程命令、转入后台、设置保活间隔 |
| 解析位置 | 本地转发中的目标地址由跳板机解析 |
典型使用场景
- 访问内网数据库:把数据库端口映射到本地,用本地客户端直连
- 访问内网控制台:管理页面仅内网可达时通过隧道打开
- 批量访问内网 Web:用动态转发建代理,一条隧道覆盖所有内网地址
- 临时排障:会话结束后隧道自动断开,不长期占用入口
- 浏览器调试:浏览器配置 SOCKS 代理后可直接访问内网站点
本地转发访问数据库
本地转发访问数据库
ssh -N -L 15432:127.0.0.1:5432 ops@bastion # 本地 15432 映射到跳板机可见的 5432
psql -h 127.0.0.1 -p 15432 -U app appdb # 另一个终端里直连本地端口
ss -tlnp | grep 15432 # 确认本地端口已在监听动态代理访问内网 Web
动态代理访问内网 Web
ssh -f -N -D 1080 ops@bastion # 后台建立 SOCKS 代理
curl -sS --socks5-hostname 127.0.0.1:1080 http://wiki.internal/ -I
curl -sS --socks5-hostname 127.0.0.1:1080 http://db.internal:9090/metrics
ps -ef | grep 'ssh -N' | grep -v grep # 用完确认进程已收掉参数对照
| 参数 | 作用 | 注意 |
|---|---|---|
| -L 本地:目标:端口 | 本地端口转发 | 目标地址由跳板机解析 |
| -D 端口 | 动态 SOCKS 代理 | 一条隧道覆盖多个内网地址 |
| -R | 远程转发 | 把本地服务暴露给远端,方向相反 |
| -N | 不执行远程命令 | 纯做隧道时的标准写法 |
| -f | 转入后台 | 配合 -N 使用,记得记录进程 |
| 保活间隔 | 防止空闲断开 | 长时间挂隧道时建议开启 |
隧道是持久通道,用完要结束对应 ssh 进程,别把临时通道留成长久可用的入口。
本地转发中的目标地址是站在跳板机视角解析的:写本机地址指的是跳板机本机,不是你自己的机器。
连不上时先用详细模式看握手过程,多数问题出在认证或跳板机侧的网络策略。