SSH 动态端口forwarding是如何工作的

好久没有来了,实在是太懒。

经常用SSH的动态端口forwarding 来FQ,使用像这样的命令:

ssh -D 9999 -f -C -q -N sshHost.somewhere.com

这个命令会建立一个tunnel到指定的远程SSH主机,这样你连接本机9999端口,并在所建立连接上读写的任何数据都会被tunnel到远端主机,从而达到FQ的效果。

一直以为SSH这个命令里面做了很复杂的事情(比如实现连接管理和端口映射)来实现这么一个功能,但总觉得对一个小工具来说,它做的太多了,而且这个显然不是SSH所应该focus的功能。直到某一天忍不住google了一把SSH的工作原理,才弄明白原来SSH支持这个功能并没有那么复杂,它其实实现的相当巧妙(参看比如https://chamibuddhika.wordpress.com/2012/03/21/ssh-tunnelling-explained/)。

SSH的实现并不是想象的那样去做了复杂的端口映射和连接管理,而是巧妙的通过内置一个SOCKS proxy的方式来完成dynamic port forwarding的功能;而这个内置的SOCKS PROXY则利用SSH提供的基本功能(remote port forwarding)来提供服务。弄清楚它的做法之后,刚好觉得以前用的Ssh Tunnel Manager不是太好使(经常它自动建立的dynamic port forwarding给hang住,估计是GFW检测到可疑的连接做了什么手脚吧),便手动实现了一个java 版的tunnel manager(感谢D,ZF,google,github和开源项目……)。

简单来说,自己做的这个ssh tunnel manager通过一个类似heart beat的task 检查到特定站点的连接(比如到google),如果发现出问题了便自动创建一个新的tunnel,关闭掉老的tunnel。如果有兴趣的可以看看源码哈,并不复杂:https://github.com/BugsLord/jsocks。

这个小工具只能算一个by product,通过这件事我想说的是

1. 保持好奇心,有时候尝试去知其所以然并不困难(比如这次不过就是动手google 了一把,而不是仅仅停留在奇怪或猜测它是怎么做的层次)

2. 学会去build一个产品而不是去create一个产品。build意味着你可以通过使用一些已经很成熟的产品或组建来实现你自己的需求,从而大大降低产品的复杂度、节约大量的人力物力。比如SSH自身就没有去做自己复杂的端口、连接的管理和映射,而是利用SOCKS proxy来搞定;我自己写的这个tunnel manager也是利用了j2ssh这个开源库而不是自己从touch开始做。这个也是符合design principle中所说的favor composition……

时间: 2024-10-12 23:28:33

SSH 动态端口forwarding是如何工作的的相关文章

【ssh】端口转发

来源:https://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/ 非常非常好用,可以通过跳板解决两台服务器无法连接的问题 第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! 端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH

SSH 的端口转发

第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我们带来什么好处吧! 端口转发概述 让我们先来了解一下端口转发的概念吧.我们知道,SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还同时提供了一个非常有用的功能,这就是端口转发.它能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解

SSH的端口转发

一.SSH端口转发的概念 SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他 TCP 端口的网络数据通过SSH 链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫做"隧道"(tunneling),这是因为 SSH 为其他TCP 链接提供了一个安全的通道来进行传输而得名.例如,Telnet,SMTP,LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输.而与此同时,如果工作环境中的防火墙限制了一些网络

SSH Tunnel (端口转发) -- 把个人PC变成“幕后boss”

指路牌 SSH Tunnel 端口转发 网上有帖子提到SSH Tunnel与端口转发是不同的,这里我没有深入研究两个名词的具体区别,从结果上来说,我是被SSH Tunnel这个名词引到这个知识点的,但实现的效果很像"端口转发",姑且都写上吧. 适用场景 希望在自己电脑本地启动服务,让Internet发向服务器的请求转向自己的电脑,从而使调试更便利. 该debug模式只有特殊情境:如强制需要固定IP等才会用到,并不具有普遍性.网上大多教程是将端口映射到局域网内某设备上,应该都出出自运维向

RHEL7.0修改SSH默认端口及SELinux运行状态修改

Linux系统安装好后,默认会开启SSH服务以便远程配置.但使用默认端口22不安全,一般不建议使用默认端口,那就需要修改SSH默认端口.在RHEL7.0上修改和7.0以下类似,但要注意SELinux的修改. SSH 为 Secure Shell,由IETF的网络工作小组(Network Working Group)所制定:SSH 是建立在应用层和传输层基础上的一种安全协议.SSH传输数据是加密的,可以有效防止传输过程被截取数据保障安全.SSH的数据是经过压缩的,所以可以加快传输的速度. 修改步骤

使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: 2.使用ping钥匙临时开启远程主机SSH:22端口: 我们今天就讨论第2种方案,阐述如何通过ping钥匙来临时打开SSH:22的访问权限 原理: recent 模块可以记录最近访问者IP,常利用此功能做DROP策略应对syn-flood及ddos攻击.但在本例中我们反其道,利用recent模块做A

SQL Browser 动态端口

一.启用TCP端口 1.启用TCP/IP协议 打开SSCM(SQL Server Configuration Manager).默认情况下,开发版.评估版.Express版禁用了TCP/IP协议. 2.全部侦听 这个选项用来指示 SQL Server 是否侦听所有绑定到计算机网卡的 IP 地址.如果设置为"是",则 IPAll 属性框的设置将应用于所有 IP 地址.默认值为"是". 如果设置为"否",则使用每个 IP 地址各自的属性对话框对各个 

DAY6 使用ping钥匙临时开启SSH:22端口,实现远程安全SSH登录管理就这么简单

设置防火墙策略时,关于SSH:22访问权限,我们常常会设置服务器只接受某个固定IP(如公司IP)访问,但是当我们出差或在家情况需要登录服务器怎么办呢? 常用两种解决方案:1.通过VPN操作登录主机: 2.使用ping钥匙临时开启远程主机SSH:22端口: 我们今天就讨论第2种方案,阐述如何通过ping钥匙来临时打开SSH:22的访问权限 原理: recent 模块可以记录最近访问者IP,常利用此功能做DROP策略应对syn-flood及ddos攻击.但在本例中我们反其道,利用recent模块做A

linux 外网ssh通过端口映射访问内网linxu

1,外网ssh通过端口映射访问内网linxu服务器