SSH本地、远程及动态端口转发详解

SSH隧道及应用

SSH客户端和SSH服务器建立SSH隧道,隧道中的所有数据都被加密。

SSH客户端:隧道的发起方                      SSH服务器:隧道的响应方

应用一:应用仅限在SSH客户端和SSH服务器之间。SSH客户端不仅是隧道的发起方,还是应用的发起方。SSH服务器不仅是隧道的响应方,还是应用服务器。

例如:SSH客户端PC访问SSH服务器mysql服务/web服务。

应用二:应用在非SSH客户端和SSH服务器之间。SSH客户端仅是隧道的发起方,不是应用的发起方。SSH服务器不仅是隧道的响应方,还是应用服务器。例如:win7 PC访问SSH服务器mysql服务/web服务。

应用三:应用在SSH客户端和非SSH服务器之间。SSH服务器仅仅是隧道的响应方,不作为应用服务器。SSH客户端不仅是隧道的发起方,还是应用的发起方。

例如:SSH客户端 PC访问server2008的远程桌面服务/web服务。

应用三:应用在非SSH客户端和非SSH服务器之间。SSH客户端仅是隧道的发起方,SSH服务器仅是隧道的响应方。

例如:win7 PC访问访问server2008的远程桌面服务/web服务。

传统的非加密应用都可以通过SSH加密隧道来传输,保证数据的私密性。

 SSH本地转发和远程转发

本地转发

【SSH本地转发:1】-应用四之http应用

基本环境介绍:

1、ssh客户端:centos7系统,默认已经安装了openssh

2、ssh客户端同网段win7

3、ssh服务器:centos7系统,默认已经安装了openssh

4、ssh服务器同网段windows server2008

server2008是一台CA服务器(开启web服务)

win7server2008都是没有网关的,他们是不能直接互访的。

现在的操作是让win7能访问server2008web服务--应用四

5、透明防火墙禁止一切应用除了SSH。

具体操作:

SSH客户端是隧道的发起方

SSH服务器是隧道的响应方

win7http应用的发起方

server2008http应用的响应方

1、ssh客户端连接ssh服务器-使用本地转发

ssh -L 192.168.1.10:7000:192.168.2.11:80 root@192.168.2.10

192.168.1.10:7000--------------ssh客户端监听7000端口

root@192.168.2.10------------ssh客户端使用root账户登录ssh服务器192.168.2.10

192.168.2.11:80----------------ssh客户端在7000端口接收访问请求,ssh服务器端发出访问请求,访问192.168.2.11 web服务

2、测试

win7 PC访问ssh客户端:http://192.168.1.10:7000

win7 PC访问ssh客户端:http://192.168.1.10:7000/certsrv

注意:此时SSH客户端相当于一台服务器,提供7000服务。

ssh服务器:

ssh客户端192.168.1.10和ssh服务器192.168.2.10建立ssh连接,而后ssh服务器192.168.2.10和web服务器192.168.2.11建立http连接。

web服务器:

此应用和FW NAT应用有类似之处:

在防火墙应用中,win7客户端不设置网关,但是又要访问外网的服务器,在FW上将外网的服务器映射到内网中来:

192.168.2.11:80---->192.168.1.10:7000

win7通过访问防火墙映射地址-同网段地址,达到访问外网服务器的目的:

192.168.1.11----->192.168.1.10:7000    client->FW

防火墙将做NAT转换,源地址192.168.1.11转换成防火墙公网地址,目的地址和端口192.168.1.10:7000转换成实际外网服务器的地址和端口192.168.2.11:80。

SSH本地转发和FW两次NAT(先做目的地址转换再做源地址转换)的区别是:

SSH本地转发使用SSH隧道,SSH客户端到SSH服务器的所有数据都是加密的;

FW两次NAT,仅仅只做NAT,不做加密。

【SSH本地转发:2】-应用四之远程桌面应用

SSH客户端是隧道的发起方

SSH服务器是隧道的响应方

win7是远程桌面应用的发起方

server2008是远程桌面应用的响应方

ssh客户端:

ssh -L 192.168.1.10:7000:192.168.2.11:3389 root@192.168.2.10

ssh客户端为centos7系统,未安装图形界面。

win7:

令细微区别:

命令1:

ssh    -L 7000:192.168.2.11:3389 root@192.168.2.10

命令2:

ssh  -g -L 7000:192.168.2.11:3389 root@192.168.2.10

命令3:

ssh    -L 192.168.1.10:7000:192.168.2.11:3389 root@192.168.2.10

命令4:

ssh  -g -L 192.168.1.10:7000:192.168.2.11:3389 root@192.168.2.10

【SSH本地转发:3】-应用一、应用二之http应用

SSH客户端是隧道的发起方也是应用的发起方

SSH服务器是隧道的响应方同时也是应用服务器(web服务器)

win7是应用的发起方

ssh客户端:

ssh -L 192.168.1.10:7000:192.168.2.10:80 root@192.168.2.10

或者

ssh -L 192.168.1.10:7000:localhost:80 root@192.168.2.10

测试:

SSH客户端:没有安装图形窗口

可以使用命令来测试:

curl http://192.168.1.10:7000

这里略。

win7:

【SSH本地转发:4】-应用三之http应用

SSH客户端是隧道的发起方也是http应用的发起方

SSH服务器是隧道的响应方

server2008http应用的响应方

ssh客户端:

ssh -L 192.168.1.10:7000:192.168.2.11:80 root@192.168.2.10

测试:

SSH客户端:没有安装图形窗口

可以使用命令来测试:

curl http://192.168.1.10:7000

这里略。

【SSH本地转发:5】--应用四之netcat应用

SSH客户端是隧道的发起方

SSH服务器是隧道的响应方

win7netcat应用的发起方

server2008netcat应用的响应方

Server2008:

创建服务端:nc -l -p 4444           //此时并不能对服务端进行命令执行

服务端:nc -l -p 4444 -e cmd.exe  //客户器端可以对服务端执行cmd的命令

SSH客户端:

ssh -L 192.168.1.10:7000:192.168.2.11:4444 root@192.168.2.10

win7:

nc  192.168.1.10 7000              

nc  192.168.1.10 7000 -e cmd.exe

组合1

服务端:nc -l -p 4444

客户端: nc  192.168.1.10 7000

客户端不可以对服务端执行cmd的命令

服务端不可以对客户端执行cmd的命令

组合2

服务端:nc -l -p 4444

客户端: nc  192.168.1.10 7000 -e cmd

客户端不可以对服务端执行cmd的命令

服务端可以对客户端执行cmd的命令

组合3

服务端:nc -l -p 4444 -e cmd

客户端: nc  192.168.1.10 7000

客户端可以对服务端执行cmd的命令

服务端不可以对客户端执行cmd的命令

组合4

服务端:nc -l -p 4444 -e cmd

客户端: nc  192.168.1.10 7000-e cmd

客户端可以对服务端执行cmd的命令

服务端可以对客户端执行cmd的命令

本地转发总结:

隧道的建立方向和应用的发起方向一致。

远程转发

【SSH远程转发:1】之远程桌面应用

由于限制,ssh客户端不能主动连接SSH服务器,但是SSH服务器能主动连接SSH客户端。

SSH客户端是隧道的响应方

SSH服务器是隧道的发起方

win7是远程桌面应用的发起方

server2008是远程桌面应用的响应方

SSH服务器:

ssh -R 192.168.1.10:9000:192.168.2.11:3389 root@192.168.1.10

SSH服务器和SSH客户端建立SSH隧道。

SSH客户端:

根据SSH服务器的的要求在9000端口监听。

win7:

注意:

远程转发,SSH客户端上,需要修改配置文件(启用sshd服务):

否则:

ssh -R 192.168.1.10:9000:192.168.2.11:3389 root@192.168.1.10

即使指定了监听地址192.168.1.10,同网段192.168.1.X地址也不能通过192.168.1.10:9000访问远程server2008。

当在ssh客户端配置

后,

SH服务器端:

ssh -R 9000:192.168.2.11:3389 root@192.168.1.10

或者

ssh -R 192.168.1.10:9000:192.168.2.11:3389 root@192.168.1.10

都有效。

【SSH远程转发:2】之远程桌面应用

SSH客户端是隧道的发起方

SSH服务器是隧道的响应方

win7是远程桌面应用的响应方

server2008是远程桌面应用的发起方

SSH客户端:

ssh -R 192.168.2.10:9000:192.168.1.11:3389 root@192.168.2.10

SSH服务器端:

SSH服务器根据SSH客户端要求在9000端口监听。

server2008:

server2008成功访问win7

SSH服务器端:

远程转发总结:

隧道的建立方向和应用的发起方向相反。

本地转发和远程转发总结

本地转发

1、

ssh -L 80:localhost:80 root@192.168.2.10

ssh -L 21:localhost:21 root@192.168.2.10

ssh -L 23:localhost:23 root@192.168.2.10

ssh -L 3306:localhost:3306 root@192.168.2.10

隧道发起方:SSH客户端

隧道响应方:SSH服务器

应用发起方:SSH客户端

应用响应方:SSH服务器(同时也是应用服务器)

2、

ssh -L 192.168.1.10:80:localhost:80 root@192.168.2.10

ssh -L 192.168.1.10:21:localhost:21 root@192.168.2.10

ssh -L 192.168.1.10:23:localhost:23 root@192.168.2.10

ssh -L 192.168.1.10:3306:localhost:3306 root@192.168.2.10

隧道发起方:SSH客户端

隧道响应方:SSH服务器

应用发起方:SSH客户端和非SSH客户端(其他通过网络能够访问SSH客户端PC的应用)

应用响应方:SSH服务器(同时也是应用服务器)

3、

ssh -L 192.168.1.10:80:192.168.2.11:80 root@192.168.2.10

ssh -L 192.168.1.10:21: 192.168.2.11:21 root@192.168.2.10

ssh -L 192.168.1.10:23: 192.168.2.11:23 root@192.168.2.10

ssh -L 192.168.1.10:3306: 192.168.2.11:3306 root@192.168.2.10

隧道发起方:SSH客户端

隧道响应方:SSH服务器

应用发起方:SSH客户端和非SSH客户端(其他通过网络能够访问SSH客户端PC的应用)

应用响应方:非SSH服务器-SSH服务器能够通过网络访问到的应用服务器

远程转发

1、

ssh -R 80:localhost:80 root@192.168.1.10

ssh -R 21:localhost:21 root@192.168.1.10

ssh -R 23:localhost:23 root@192.168.1.10

ssh -R 3306:localhost:3306 root@192.168.1.10

隧道发起方:SSH服务器

隧道响应方:SSH客户端

应用发起方:SSH客户端

应用响应方:SSH服务器-SSH服务器同时也是应用服务器

注:

使用场景:一方只允许被动接受SSH连接,不允许主动发起SSH连接的情况下

条件限制:被动接受方需要安装ssh应用和开启sshd服务。

2、

ssh -R 80:localhost:80 root@192.168.1.10

ssh -R 21:localhost:21 root@192.168.1.10

ssh -R 23:localhost:23 root@192.168.1.10

ssh -R 3306:localhost:3306 root@192.168.1.10

隧道发起方:SSH服务器

隧道响应方:SSH客户端

应用发起方:SSH客户端和非SSH客户端

应用响应方:SSH服务器-SSH服务器同时也是应用服务器

注:

使用场景:一方只允许被动接受SSH连接,不允许主动发起SSH连接的情况下

条件限制:被动接受方需要安装ssh应用和开启sshd服务。

3、

ssh -R 80:192.168.2.11:80 root@192.168.1.10

ssh -R 21: 192.168.2.11:80:21 root@192.168.1.10

ssh -R 23: 192.168.2.11:80:23 root@192.168.1.10

ssh -R 3306: 192.168.2.11:80:3306 root@192.168.1.10

隧道发起方:SSH服务器

隧道响应方:SSH客户端

应用发起方:SSH客户端和非SSH客户端

应用响应方:非SSH服务器-SSH服务器能够通过网络访问的其他应用服务器。

注:

使用场景:一方只允许被动接受SSH连接,不允许主动发起SSH连接的情况下

条件限制:被动接受方需要安装ssh应用和开启sshd服务。

SSH动态端口转发

 

隧道方向:SSH客户端--------------->SSH服务器端

本地转发:实际上等同于将外网服务器映射到内网中来,供内网应用访问;

远程转发:实际上等同于将内网服务器映射到公网,供公网应用访问。

本地转发和远程转发都存在本地地址:端口和远程地址:端口一一对应的情况。

动态端口转发:不指定映射关系,内网访问的所有目标地址:端口由SSH服务器代其访问。

类似于FW的SNAT源地址转换。

SSH客户端和SSH服务器组成代理服务器;SSH客户端负责监听-接受访问请求,SSH服务器负责发出请求,将回应通过SSH客户端转发给实际请求者

SSH动态端口转发:1----应用仅限在SSH客户端和SSH服务器之间

SSH客户端:

ssh -fN -D 192.168.1.10:20000 root@192.168.2.10

注意:SSH客户端登录SSH服务器,这里使用的是公钥认证----SSH客户端的公钥已经上传到SSH服务器上。

SSH客户端已经在20000端口开始监听了。

现在测试从SSH客户端访问SSH服务器的80端口

成功。

SSH服务器-web应用服务器index.html主页如下:

SSH动态端口转发:2----应用不再仅限在SSH客户端和SSH服务器之间

需求:使win7能够访问SSH服务器的web应用。

SSH客户端:

ssh -g -fN -D 192.168.1.10:20000 root@192.168.2.10

隧道已经建立好。

win7:

设置IE代理

win7直接访问ssh服务器web服务

ssh服务器:

SSH动态端口转发:3----应用不在SSH客户端和SSH服务器之间

需求:使win7能够访问server2008服务器的web应用和远程桌面。

SSH客户端:

ssh -g -fN -D 192.168.1.10:20000 root@192.168.2.10

win7:

设置IE代理

server2008:

server2008应用服务器没有设置网关

测试:web服务

win7:

直接访问server2008 web服务

server2008:

web服务请求源地址为ssh服务器192.168.2.10

测试:远程桌面服务

win7:

win7系统自带的mstsc应用程序,不能设置代理服务器,必须借助其他工具。

这里使用SocksCap64

设置代理服务器地址和端口(ssh客户端地址和监听端口)

将mstsc应用程序添加进来。

选择”在代理隧道中运行选中程序”

SocksCap64会自动打开mstsc

输入server2008服务器地址--连接

win7已经连接上server2008了。在服务器上看,源地址为192.168.2.10,为SSH服务器。

SocksCap64使mstsc用代理来远程连接服务器,可能不太稳定,需要多连接几次。

总结:

SSH服务器能够访问的应用或者使用的服务,通过动态端口转发机制,SSH客户端或者能够访问SSH客户端的其他应用都能访问或者使用。 

扩展

SSH客户端PC不使用centos系统,这次使用win7系统。SSH服务器还是使用centos。

win7是不自带ssh客户端程序的,这里借助工具putty和MobaXterm。

1、putty

A、本地转发

设置ssh服务器地址和端口

设置本地转发:win7ssh客户端本地监听8000和9000端口,映射到远端服务器

0.0.0.0:8000-------------------------------->192.168.2.10:80(ssh服务器web服务)

0.0.0.0:9000-------------------------------->192.168.2.11:3389(server2008服务器远程桌面服务)

SSH客户端PC上测试:

访问SSH服务器的web服务

访问server2008的远程桌面

win7上测试:

访问SSH服务器web服务和server2008远程桌面

注意:win7访问的目的地址和端口是ssh客户端的地址和监听端口

192.168.1.10:8000

192.168.1.10:9000

win7通过192.168.1.10:9000成功访问server2008远程桌面服务。

总结:

实际效果:

服务器192.168.2.10:80映射到内网192.168.1.10:8000

服务器192.168.2.11:3389映射到内网192.168.1.10:9000

B、远程转发

设置远程转发:ssh服务器本地监听88889999端口,映射到本地服务器

192.168.2.10:8888-------------------------->192.168.1.10:3389(ssh客户端远程桌面服务)

192.168.2.10:9999-------------------------->192.168.1.11:3389(win7主机远程桌面服务)

注意这时候应用从外网发起

server2008:

server2008同时访问ssh服务器的8888和9999端口

远程桌面成功登录win7,远程桌面登录ssh客户端,黑屏和自动断开。

远程192.168.2.10:8888(实际上是远程到192.168.1.10SSH客户端PC上),而SSH客户端是隧道的发起方,一直黑屏,且自动断开远程桌面连接。

远程192.168.2.10:9999 (实际上是远程到192.168.1.11 win7客户端PC上),很正常。

server2008通过远程转发访问ssh客户端的3389,黑屏及断开原因查找:

不通过远程端口转发,server2008直接远程桌面SSH客户端PC和win7PC:

注意:需要给server2008设置网关地址,同样SSH客户端PC和win7PC也需要网关地址。

没有经过加密的SSH隧道,远程桌面正常。

server2008成功远程桌面SSH客户端PC和win7PC。

即远程转发不能将ssh客户端的3389服务映射出去,ssh客户端其他服务映射不受影响。

ssh客户端的服务映射不受影响。

C、动态端口转发

SSH客户端PC:

设置动态端口转发:ssh客户端本地监听7000端口

ssh客户端设置IE代理

从SSH客户端分别访问SSH服务器和server2008服务器的web应用。

ssh客户端上设置代理服务器地址和端口

SSH客户端PC成功访问server2008远程桌面。

远程桌面访问的源地址为192.168.2.10(ssh服务器),非SSH客户端192.168.1.10

SSH服务器上检查:

Server2008:

win7 PC访问SSH服务器和server2008 web应用:

和前面在SSH客户端PC上访问类似,注意IE代理设置:

SSH客户端上设置是127.0.0.1:7000,这里(win7)设置是192.168.1.10:7000。

win7PC访问server2008远程桌面应用:

和前面在SSH客户端访问类似,注意sockscap64代理设置

前面设置是127.0.0.1:7000,这里设置是192.168.1.10:7000

2、MobaXterm

SSH客户端和win7 PC都安装MobaXterm工具

A、本地转发

SSH客户端监听12345,192.168.2.10是SSH服务器同时还是remote server。

SSH客户端监听8080,192.168.2.10是SSH服务器,remote server是192.1668.2.11。

SSH客户端监听33890,192.168.2.10是SSH服务器,remote server是192.1668.2.11。

启动

测试:

SSH客户端上:

取消IE代理设置。

ssh客户端上成功访问ssh服务器web服务,server2008服务器web服务和远程桌面服务

win7客户端上:

取消IE代理设置。

注意:win7访问的目的地址是ssh客户端的地址192.168.1.10。

此时,ssh客户端相当于一台服务器,提供12345808033890服务。

B、远程转发

个人版MobaXterm最多只能同时做3个隧道。

修改本地转发:

ssh服务器监听12345端口,映射到ssh客户端(192.168.1.10)的3389。ssh客户端同时也是隧道的发起方。

ssh服务器监听33890端口,映射到win7的3389。

测试:注意,应用方向为server2008向SSH服务器发起连接。

server2008:

同时访问ssh服务器12345和33890服务

192.168.2.10:12345映射到SSH客户端192.168.1.10:3389,

192.168.2.10:33890映射到SSH客户端192.168.1.11:3389,

同样因为加密隧道的原因(SSH客户端PC为隧道的发起方),server2008远程桌面访问SSH客户端PC,黑屏,自动断开。

server2008远程桌面访问win7客户端PC正常。

既然3389应用有问题,换一个应用。

在SSH客户端上开启80服务

修改远程转发,将192.168.2.10:12345映射到ssh客户端192.168.1.10:80

server2008上访问http://192.168.2.10:12345   映射后的地址为192.168.1.10:80。

备注:ssh客户端作为隧道的发起方,虽然也能作为应用服务器对外提供服务,但是个别应用服务受限---比如3389。

C、动态端口转发

SSH客户端:

SSH客户端监听10000,192.168.2.10是SSH服务器。

测试:

SSH客户端PC上:

设置IE代理地址:127.0.0.1:10000

SSH客户端分别成功访问SSH服务器和server2008的web应用

ssh客户端上:设置sockscaps64------注意代理设置端口为10000.

ssh客户端上访问server2008远程桌面

在SSH客户端PC上成功远端桌面登录server2008---192.168.2.11

可以看到是192.168.2.10-SSH服务器在使用远程桌面登录server2008

在win7 PC上:

首先需要在ssh客户端PC上配置

将监听地址设置为接口地址-不要使用127.0.0.1或者0.0.0.0

然后重启动态端口转发

win7设置IE代理的地址为:192.168.1.10:10000

win7 PC成功访问SSH服务器和server2008的web应用。

win7上远程桌面的代理设置

win7访问server2008的远程桌面服务

win7 PC通过代理成功访问server2008远程桌面。

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值