SSH端口转发(Port Forwarding)

ssh的端口转发不仅仅是为ssh服务,因为它可以转发任意端口,所以理论上可以为任意服务提供转发,实现一些不可能的连接。

机器假设

A: 192.168.1.2(Server1)
B: 192.168.1.3(Server2)
C: 192.168.1.101(client1)
D: 192.168.1.102(client2)
E: 8.8.8.8(Remote Server)

本地转发(在client机器上执行的命令)

ssh -L <local port>:<remote host>:<remote port> <SSH hostname>
如:
ssh -L 8000:localhost:80 user@192.168.1.2

上述转发只能在执行命令的client本机使用,如果想在其它机器上也能使用,需要添加GateWayPorts(即-g)

ssh -g -L <local port>:<remote host>:<remote port> <SSH hostname>

如果转发不可用,很可能是执行命令的client机器上没有开启防火墙端口。

不过需要注意的是,该连接并没有完全使用ssh的加密功能,只有执行命令的client和ssh hostname机器之前的连接是加密的。

另外,remote host和ssh hostname可以是不同的机器,如:

ssh -g -L 8000:192.168.1.2:80 user@192.168.1.3

上述转发最终转发的还是192.168.1.2上的80端口,只不过是借助了192.168.1.3机器。当client无法直接ssh连接server 192.168.1.2时,如果可以ssh连接server 192.168.1.3并且192.16.1.2上的服务可以被192.168.1.3访问时就可以这么搞了。不过需要注意的是,该连接并没有完全使用ssh的加密功能,只有执行命令的client和ssh hostname机器之前的连接是加密的。

远程转发(在server机器上执行的命令)

ssh -R <local port>:<remote host>:<remote port> <SSH hostname>
如:
ssh -R 8000:localhost:80 user@192.168.1.101

和本地转发的区别就是在server端执行命令,-L变成了-R,ssh登录的机器由server变成了client。转发效果是完全一样的。之所以搞这么两套是因为有时候client和server并不是都能互相ssh连接的。

上述转发同样只在该client机器(192.168.1.101)有效,如果想在其它机器上也能使用,需要开启GateWayPorts。只不过这次不能再用-g参数,而是在/etc/ssh/sshd_config中添加一行

GateWayPorts yes

然后

service sshd reload

因此,执行

ssh -R 8000:localhost:80 user@8.8.8.8

由于8.8.8.8机器在公网,所以可以实现所有机器通过8.8.8.8机器访问在公网不可见的server。并且可同时转发多个端口,如:

ssh -R 8000:localhost:80 -R 8001:localhost:8080 user@8.8.8.8

动态转发(在client机器上执行的命令)

ssh -D <local port> <SSH Server>
如:
ssh -D 1080 user@192.168.1.2

在client机器上配置SOCKS v5代理(代理为localhost,端口即为我们指定的1080)。

动态转发就是在client机器上把server机器当作了一个SOCKS v5代理。这样也可以用于实现所有端口的转发,不再需要一一配置。

后台执行

上述转发命令执行完了以后会ssh远程登录到ssh hostname机器,如果我们并不想ssh登录,仅仅是想执行端口转发,可以在ssh之后添加“-fN”(要放在ssh之后紧挨着,不要放在-L、-R、-g等之后)。

其它高级用法

待续。。。

Windows上使用

ssh client
可用的很多,putty, Xsheel等。
sshd server
设置最简单的就是Bitvise(个人使用免费),还有一些开源的可以使用,如:FreeSSHd,Kpym(但都Discontinued了)。功能最强大的就是cygwin,只是设置稍微有点麻烦。

需要注意的是:如果安装多个server软件,同时只能开一个,或者把端口设置成不一样的。不然很可能连上的并不是你想要的那个。

 

Reference   Refenence2

Add a Comment

电子邮件地址不会被公开。 必填项已用*标注

18 − 3 =