ssh 端口转发分为三个部分: - 正向转发(正向代理) - 反向转发(反向代理) - 动态转发(动态代理)
示例:由于在服务器上的mysql服务不能通过远程访问的方式登录和访问,只能通过本地访问的方式来访问。如上图所示,你如果来内网设备1上,要登录上服务器中的mysql数据库中,你可以使用ssh的正向端口转发来操作。
你可以在内网设备1
执行命令如下:
ssh -L 33:localhost:3306 USERNAME:23.24.123.12
以上命令的意思是:我们可以通过访问本地的33
端口就好似访问远程mysql服务器上的3306
端口。
**注意:**如果你要实现反向代理首先得需要在服务器的sshd配置的配置文件中配置一个参数:
# 默认的sshd配置文件在 /etc/ssh/sshd_config
GatewayPorts yes
重启sshd服务,重启命令:systemctl restart sshd
或者 service sshd restart
示例:如果你现在在上图的移动设备中,而且移动设备是连上互联网的,如果你在移动设备上访问内网设备2
上的服务,因为内网设备2
在内网中,是不能直接访问的。如果你有个公网上的服务器,那么就可以使用ssh反向端口转发来实现。这里假设你拥有的公网服务器是WEB服务器(23.24.123.11)
。
你可以在内网设备2
执行命令如下:
ssh -R 0.0.0.0:23333:localhost:8080 [email protected]
反向转发就是把本地一个端口暴露到某个公网服务器上的某个端口,以上命令的意思是:我访问23.24.123.11
机器的23333端口,就好似在访问内网设备2
的8080端口。其中0.0.0.0
的意思是任意IP的机器都可以访问23.24.123.11
的23333端口。
如果你要访问内网设备2
上的服务,就可以把以上命令中的localhost换成内网设备2
的IP地址,命令如下:
ssh -R 0.0.0.0:23333:192.168.1.1:8080 [email protected]
以上命令的意思就是把192.168.1.1:8080
映射到23.24.123.11:23333
。
动态转发其实比较好理解,如果我们在内网设备1
上,我们想去访问:https://www.baidu.com/s?ie=utf-8&wd=IP ,可以掉IP为:202.123.4.1。如果我们通过服务器:WEB服务器(23.24.123.11),那么百度出来的IP就是:23.24.123.11。
可以执行如下命令来动态转发:
ssh -D 8880 [email protected]
以上命令的意思是:用WEB服务器把本地8880端口的数据动态转发出去。
-f 后台执行ssh指令
-C 允许压缩数据
-N 不执行远程指令
-R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p 指定远程主机的端口
ssh隧道默认情况下长时间没有用是会被断开的,如果想要维持长时间连接可以加上参数:
-o ServerAliveInterval=60