SSH隧道端口转发
SSH端口转发(Port Forwarding),是一种隧道技术,流往某端口的数据被加密后传向另一机器,依据转发方式的不同,有多种应用场景。
以下所有的命令都是用SSH客户端执行的。执行命令的电脑下面称为“本地”电脑;而“中转服务器
”则是运行着SSH服务器的机器(本文以goipc.cn
为例)。
本地转发
有时,远程机器中转SSH服务器[gopic.cn
]能访问某个端口(如goipc.com.cn:8080
),但本地机器无法访问。这时使用SSH的本地转发功能,即可将远程端口映射到本地:
ssh -L 9090:goipc.com.cn:8080 gopic.cn
此时访问本地的9090端口,就相当于通过中转SSH服务器 gopic.cn
,最终访问访问goipc.com.cn:8080。
- 如果写成-L 9090:localhost:8080,就是把
中转SSH服务器
的8080端口映射到本地的9090端口了。- 应用举例:如果远程服务器处于某受保护的内网中,可以借助其SSH服务获得与其等同的访问权限。
远程转发。
ssh -R 2222:localhost:22 goipc.cn
这样,连接中转SSH服务器建立监听gopic.cn:2222
, 通过这个隧道就能到到本地localhost:22。
应用举例:有时,本地电脑处于NAT内网中,难以从外部访问;而远程服务器可轻易被访问。利用远程转发功能,可允许他人通过远程服务器间接访问本地电脑的某个端口。所以
类似本地转发,远程转发的端口默认也只能在远程服务器本机上访问,要想允许外部访问,可改写为-R *:9090:openiris.cn:8080,
动态转发
动态转发动态地将各种数据转发到远程端口。实际上相当于在本地电脑的指定端口开了一个SOCKS代理。如:
ssh -D 9090 user@ssh.com
本地的9090端口就是一个SOCKS代理了。
如果@ssh.com是境外服务器,则该SOCKS代理实际上具备了“翻墙”功能。
案例应用
由于服务器中mysql的端口,在防火墙只能,外放不能够访问。所以可以使用本地转发模式。通过本地端口10002,查看远程服务器中mysql数据库。mysql服务器监听3306端口,
ssh -CNfg -L 10002:localhost:3306 user@goipc.cn -p 22222
常用参数
端口转发常与以下参数配合使用[3]:
-p 远程服务器的ssh监听端端口
-f ssh将在后台运行
-N 不执行命令,仅转发端口
-C 压缩传送的数据
-i 使用指定的密钥登录
-g 本地转发的端口只能在本机上访问,要想允许外部访问,请添加选项。