SSH隧道全流程

极客

SSH隧道全流程:从本地端口转发到远程跳板,一篇给你讲透!

说实话,我第一次接触SSH隧道的时候,脑子里全是问号,什么本地转发、远程转发、动态转发……听着就头大对吧?但后来用着用着才发现,这玩意儿简直是运维和开发者的救命稻草!今天我就用最接地气的方式,把SSH隧道全流程给你从头到尾捋一遍,保证你看完就能上手。

SSH隧道全流程

SSH隧道到底是个啥?为啥要用它?

SSH隧道就是通过一条已经加密的SSH连接,把其他网络流量"塞"进去传,你想想啊,公司内网的数据库只允许跳板机访问,你在家想连怎么办?直接连肯定连不上嘛,但如果你先SSH到跳板机,再让跳板机帮你转发流量到数据库,这不就通了?

我当时第一次配通的时候,那感觉,哇,真香!

SSH隧道全流程之本地端口转发

这是最常用的一种,命令长这样:

ssh -L 本地端口:目标地址:目标端口 用户@跳板机

举个例子哈,我想通过跳板机 jump.example.com 访问内网数据库 0.0.5:3306,本地开个 13306 端口:

ssh -L 13306:10.0.0.5:3306 user@jump.example.com

然后我本地连 0.0.1:13306 就等于连上了那台数据库,是不是很神奇?

这里的关键点在于:流量走向是 本地→跳板机→目标,整个SSH隧道全流程中,本地转发是最直观的,因为你只需要在本地发起连接就行了。

远程端口转发,方向反过来

有时候情况反过来,比如你想让外网的人访问你内网的机器,这时候就得用 -R

ssh -R 远程端口:目标地址:目标端口 用户@远程服务器

打个比方,你本地跑了个Web服务在 8080,想让公网服务器 public.com9090 端口转发过来:

ssh -R 9090:localhost:8080 user@public.com

这样别人访问 public.com:9090 就能看到你本地的服务了,不过这中间还得注意 GatewayPorts 配置,不然默认只绑定 0.0.1,外网还是访问不了,我第一次踩这个坑的时候,调试了半个小时才反应过来,哎。

动态转发,也就是常说的SOCKS代理

这个更猛,一条命令搞定全局代理:

ssh -D 1080 user@跳板机

然后你浏览器设置SOCKS5代理 0.0.1:1080,所有流量都走跳板机出去了。SSH隧道全流程里,动态转发是最灵活的一种,因为它不限定目标端口,爱连啥连啥。

完整流程总结与实用参数

一个完整的SSH隧道全流程,其实就这几步:

  1. 建立SSH连接(认证方式可以用密码或密钥)
  2. 指定转发类型-L / -R / -D
  3. 保持连接稳定(加 -N 不执行远程命令,-f 后台运行)
  4. 加上保活参数ServerAliveInterval=60 防止断线)
  5. 验证隧道是否生效netstat 或直接访问测试)

我常用的组合是:

ssh -N -f -L 13306:10.0.0.5:3306 -o ServerAliveInterval=60 user@jump.example.com

这样一条命令下去,后台默默帮你干活,稳得很。

几个容易踩的坑

  • 端口被占用?换个本地端口就行。
  • 权限不够?低于1024的端口需要root。
  • 连接老断?加上保活参数,或者用 autossh
  • 转发不生效?检查 sshd_config 里的 AllowTcpForwarding

说真的,SSH隧道全流程掌握之后,你会发现很多网络限制都不是事儿了,不管是调试内网服务、临时穿透、还是做个加密代理,SSH隧道都能帮你搞定,希望这篇能帮你少走点弯路,有啥问题欢迎留言交流哈!

文章版权声明:除非注明,否则均为极客网安-咸鱼原创文章,转载或复制请以超链接形式并注明出处。

目录[+]