码迷,mamicode.com
首页 > 其他好文 > 详细

ssh强大的端口转发功能

时间:2018-05-03 19:45:33      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:ssh 隧道   ssh 的 socket   

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

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

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

-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 端口, 一旦这个端口上有了连接, 该连接就经过安全通道转发出去, 根据应用程序的协议可以判断出远程主机将和哪里连接.

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

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

-g Allow remote hosts to connect to forwarded ports.
在-L/-R/-D参数中,允许远程主机连接到建立的转发的端口,如果不加这个参数,只允许本地主机建立连接。注:这个参数我在实践中似乎始终不起作用。

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

服务器

远端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
 应用场景:此种方式适合做×××代理服务器

ssh强大的端口转发功能

标签:ssh 隧道   ssh 的 socket   

原文地址:http://blog.51cto.com/rsddn/2112398

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!