【Linux】简单讲讲ssh隧道,和具体如何去使用
SSH隧道,一文简单讲述
一、SSH隧道这东西,其实没那么复杂
SSH端口转发就是把你想要访问的远程服务,映射到本地一个端口上。
不管是本地转发、远程转发还是动态转发,本质上都只是方向不同而已。
二、为什么需要SSH隧道?
举个例子:
MySQL服务主机在企业内网中,而对应内网主机IP是 192.168.1.100,你在家根本连不上。但是你能SSH登录到企业中其他的机子(即跳板机),而跳板机能访问内网中192.168.1.100的MySQL。
这时候就可以用SSH隧道——它在你本地和跳板机之间建了一条加密管道,你的MySQL请求走这条管道,从跳板机出去,就能访问到内网的MySQL。
三、本地端口正向转发(-L):最常用的模式
先说最常用的本地转发。
基本用法
ssh -L 本机端口:目标主机ip:目标机端口 登录用户名@跳板机ip
如果不需要跳板,跳板机ip就直接写目标机ip
多端口转发
有时候需要同时访问多个服务,建立多条隧道,可以一起写,就比如:
ssh -L 3306:mysql数据库主机ip:3306 \
-L 6379:redis数据库主机ip:6379 \
-L 8080:web服务主机ip:80 \
user@跳板机ip
这样本地就同时监听了三个端口,都能用。
后台运行
如果隧道要长期开着,建议后台运行:
ssh -fNT -L 3306:目标机ip:3306 user@目标机ip
参数解释:
-f:后台运行-N:不执行远程命令-T:不分配终端
这样SSH隧道就在后台跑着了,不会占着你当前的终端。
四、远程端口反向转发(-R):内网穿透神器
远程转发是把本地的服务暴露到远程服务器上。
使用场景
比如你在本地开发了个Web应用,跑在localhost:3000,想给客户演示。但你没有公网IP,客户访问不了。
这时候如果你有台云服务器(假设地址是cloud.example.com),就可以这样:
ssh -R 8080:localhost:3000 user@cloud.example.com
执行后,客户访问http://cloud.example.com:8080,就能看到你本地的应用了。
动态端口转发(-D):SOCKS代理
这个我用的比较少,但偶尔也会用到。
动态转发相当于在本地开了一个SOCKS代理,所有支持SOCKS的应用都能走这个代理。
基本用法
ssh -D 1080 user@your-server.com
然后在浏览器里配置SOCKS代理:
- 代理地址:127.0.0.1
- 端口:1080
- 类型:SOCKS5
这样浏览器的所有流量都会走SSH隧道,加密后从你的服务器出去。
进阶技法
多跳SSH
有些公司的网络架构比较复杂,需要先跳到一台机器,再跳到另一台,才能访问目标服务。
我之前遇到这种情况都是嵌套SSH命令,特别麻烦。后来发现可以直接用-J参数:
ssh -J user@jump1.com,user@jump2.com -L 3306:db:3306 user@target.com
这样就自动经过两台跳板机了,方便很多。
定期检查隧道
这些命令可以检查挂着的隧道:
# 查看当前SSH连接
ps aux | grep ssh
# 查看监听的端口
netstat -tulpn | grep ssh
及时取消掉不用的隧道。
如果前面有不对的地方,欢迎大家来指正。
更多推荐




所有评论(0)