首页/系统/Linux 运维命令速查/场景:SSH 隧道访问内网服务
网络命令82 条

场景:SSH 隧道访问内网服务

只有跳板机可达内网时:-L 转发单个服务(数据库/控制台),-D 建 SOCKS 代理走浏览器/curl,比暴露端口安全。

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

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 进程,别把临时通道留成长久可用的入口。
本地转发中的目标地址是站在跳板机视角解析的:写本机地址指的是跳板机本机,不是你自己的机器。
连不上时先用详细模式看握手过程,多数问题出在认证或跳板机侧的网络策略。

易错点

  • 本地转发的目标地址由跳板机解析,写本机地址会指向跳板机而不是预期主机,容易连错库
  • 长连接容易被中间设备静默断开,需要设置保活间隔维持活跃
  • 后台隧道无人管理会长期保持通道可访问,收尾时要确认进程已退出
  • 本地端口已被占用时隧道启动会报绑定失败,先确认端口空闲或换一个本地端口

数据来源与参考

  • man 1 ssh(OpenSSH 手册)

相关工具

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