ssh强大的端口转发功能

ssh 最普通的用法即是经过 ssh 远程登陆 linux 服务器,或是远程执行命令,可是,ssh 的用法不光局限于此,它的端口转发功能才是高级的用法。
ssh的远程登陆以及远程执行命令就不记录了,主要记录一下 ssh 在不一样地方的端口转发。html

这是ssh的参数解释
相关参数的解释: linux

-f Fork into background after authentication.
后台认证用户/密码,一般和-N连用,不用登陆到远程主机。nginx

-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/hostportshell

-D port
指定一个本地机器 “动态的’’ 应用程序端口转发. 工做原理是这样的, 本地机器上分配了一个 socket 侦听 port 端口, 一旦这个端口上有了链接, 该链接就通过安全通道转发出去, 根据应用程序的协议能够判断出远程主机将和哪里链接. 安全

-C Enable compression.
压缩数据传输。服务器

-N Do not execute a shell or command.
不执行脚本或命令,一般与-f连用。ssh

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,容许远程主机链接到创建的转发的端口,若是不加这个参数,只容许本地主机创建链接。注:这个参数我在实践中彷佛始终不起做用。socket

以上摘录: http://blog.creke.net/722.htmlide

服务器.net

远端A主机 ip: 111.21.21.2 ; 远端B主机 ip: 172.16.3.22
本地A主机 ip: 192.168.1.2 ; 本地B主机 ip: 192.168.1.5
能够理解为,远端主机A.B是一个局域网内的服务器,本地主机A.B 是本身当前所在的服务器;咱们能够直接登陆本地主机A或者B。可是,本地主机和远端主机之间,只有本地的 A 主机和远端的 A 主机能够互相直接通讯。由此,对应不一样的场景,咱们便须要作端口转发来知足跨网段访问,能够理解为作端口转发的那台机器至关因而代理服务器。

示例1

从远端A主机作 ssh 隧道,将远端B主机的 3306 端口转发到本地的 A 主机上的 13306 端口上过,而后用 本地的 B 主机经过 本地A主机的 13306 登陆 远端B主机的 3306 端口

ssh -Nf -R 13306:172.16.3.22:3306 root@192.168.1.2 -o ServerAliveInterval=60

添加说明: 此方法,是在远端A主机执行此命令,将 13306 端口转发到了本地A主机上,能够在本地A主机上看到有 13306 端口,。当从 本地B主机 请求 本地A主机的 13306 端口时,本地A主机 将会直接经过 22 端口转发到 远端A主机的 22 端口,而后 远端A主机再去经过 22 端口请求远端 B 主机 的 3306端口,由此实现跨网段访问。这种方法最直观的展示给咱们的是,经过 本地B主机 登陆 本地A主机 的 13306 会直接登陆到 远端B主机的 3306 端口上。
使用场景: 此方法使用于本地想要直接链接远端局域网内其余服务器的各类端口。
缺点:此方法有个蛋疼的地方,转发过来的端口不能对外,只能本机访问,想要再其余机器访问的话,本机装一个nginx,将本机的 127.0.0.0:13306 端口代理出去便可。

示例2

本地A主机分配socket,端口转发到远端A主机,本地B主机经过本地A主机开的端口去访问远端A主机,远端A主机判断出来自本地A主机的请求类型去访问请求对应的资源返回给本地A主机,而后本地A主机再将请求内容返回给本地B主机,能够看作本地A主机是本地代理服务器,远端A主机是远端代理服务器。

ssh -C -fNg -D 65122 test@111.21.21.2 -p 22 -o ServerAliveInterval=60
应用场景:此种方式适合作×××代理服务器
相关文章
相关标签/搜索