ssh的三个强大的端口转发命令:
ssh -C -f -N -g -L listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -R listen_port:DST_Host:DST_port user@Tunnel_Host
ssh -C -f -N -g -D listen_port user@Tunnel_Host
-f Fork into background after authentication.
后台认证用户/密码,一般和-N连用,不用登陆到远程主机。
-p port Connect to this port. Server must be on the same port.
被登陆的ssd服务器的sshd服务端口。
-L port:host:hostport
将
本地机(客户机)的某个端口转发到远端指定机器的指定端口. 工做原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口,
一旦这个端口上有了链接, 该链接就通过安全通道转发出去, 同时远程主机和 host 的 hostport 端口创建链接.
能够在配置文件中指定端口的转发. 只有 root 才能转发特权端口. IPv6 地址用另外一种格式说明: port/host/hostport
-R port:host:hostport
将
远程主机(服务器)的某个端口转发到本地端指定机器的指定端口. 工做原理是这样的, 远程主机上分配了一个 socket 侦听 port 端口,
一旦这个端口上有了链接, 该链接就通过安全通道转向出去, 同时本地主机和 host 的 hostport 端口创建链接.
能够在配置文件中指定端口的转发. 只有用 root 登陆远程主机才能转发特权端口. IPv6 地址用另外一种格式说明:
port/host/hostport
-D port
指定一个本地机器 “动态的'’ 应用程序端口转发.
工做原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了链接, 该链接就通过安全通道转发出去,
根据应用程序的协议能够判断出远程主机将和哪里链接. 目前支持 SOCKS4 协议, 将充当 SOCKS4 服务器. 只有 root
才能转发特权端口. 能够在配置文件中指定动态端口的转发.
-C Enable compression.
压缩数据传输。
-N Do not execute a shell or command.
不执行脚本或命令,一般与-f连用。
-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,容许远程主机链接到创建的转发的端口,若是不加这个参数,只容许本地主机创建链接。注:这个参数我在实践中彷佛始终不起做用,参见III)
实例说明:
一台服务器提供ftp服务,由于ftp传输是明文密码,若是不作ssh端口以前,咱们能够经过tcpdump命令很容易的捕捉到明文信息。因此咱们要对21端口进行转发:
(ftp-server)# ssh -CNfg -R 2121:localhost:21 root@10.4.2.50
而后登陆到10.4.2.50机器,咱们能够经过netstat -an|grep :2121查看端口已经侦听
(10.4.2.50)# ftp localhost 21就能够登陆到ftp-server了,并且tcpdump没法捕获到有效的信息。
2121端口任意选择,只要是机器上没有占用的端口就行
来一个稍微复杂一点的,作网关的例子:
假
如内网有一台提供ftp(linux,port is 2121,称为A机器)的机器,经过网关服务器(linux,port is
8888,称为B机器)进去,如今外网有一台C机器须要访问网关服务器的某个端口(port is
21)来访问内网的ftp服务器。你们能够看到,其实这就像是一个基于ssh的防火墙程序,好,下面咱们来具体操做:
1。login A 机器
# ssh -CNfg -R 8888:localhost:2121 root@B机器IP
这样咱们就在B机器上开了一个8888->2121的端口转换,可是因为8888端口只能侦听在localhost主机上,所以,虽然咱们已经能够在B机器上使用
# ftp localhost 8888 来访问真正的ftp服务器,但仍然没法提供给外网的机器访问
2。login B机器
# ssh -CNfg -L 21:localhost:8888 root@localhost
这样作,是作本地机器上的21->8888端口转换,能够侦听在任何地址上的请求。
2(1)。
若是C机器也是一台linux机器,那也能够这样设置:
# ssh -CNfg -R 21:localhost:8888 root@C机器IP
3。使用C机器,能够是linux下的ftp命令,也能够是windows下的客户端软件均可以访问B机器的21端口来链接后台真正的ftp服务器(真正的端口是2121)linux
实际操做:shell
1.内网机器操做
ssh -CNfg -R 8880:localhost:8080 root@60.247.10.Xwindows
2.公网机器操做
ssh -CNfg -L 8881:localhost:8880 root@localhosttomcat
这样公网中的机器只须要访问http://60.247.10.X:8881安全
就访问到了我内网的那台部署tomcat的机器。服务器