一、什么是SSH代理
ssh通常被用来对设备进行远程管理,是telnet软件功能的安全增强版本。使用时ssh客户端以远程网络的方式连接到ssh服务端,随后就可以远程执行管理设备的命令。
ssh代理在此基础上对其进行功能扩展,ssh客户端与ssh服务端建立的通道不在用于远程系统管理,而是承载希望被服务端转发的网络流量,此时ssh工作在代理模式,他们建立的通道也叫做ssh隧道。
二、SSH代理能够做什么
通过ssh代理生成的隧道,可以在数据被加密的情况下被转发和接收,进而突破网络安全规则的网络访问,也就是大家常说的爬梯子。当然这里的加密仅是理论上的,原因之一是密码算法和密码的强度可能被破解,原因之二是在ssh隧道建立过程中的加密参数可能被中间人窃取。
三、SSH是怎么工作的
理论上,ssh代理并非透明的传输客户端接收到的数据,而是将接收的数据承载在ssh客户端和服务端之间的某条回话上,因此在进过ssh隧道转发后的数据的IP头部、TCP/UDP头部(如果有的话)已经发生了变化。ssh代理有三个工作场景,分别是正向代理、反向代理、动态端口代理。
(一)正向代理
正向代理示意图
左侧数字表示的客户端可以通过A和B建立的ssh隧道访问他们因网络安全策略限制而无法访问的C上的业务。
1.左侧的数字代表希望通过ssh隧道访问C服务器上8888端口资源的客户端。
2.A为ssh隧道客户端,也是隧道的入口,因此具有隧道服务属性,具体表现在打开了一个3721的TCP端口,来监听希望通过隧道转发的数据。
3.B为ssh隧道服务端,同时也是ssh隧道的终点。
ssh隧道将左侧数字表示的客户端的不同连接进行会话化,使不同的会话表示不同的客户端业务。
4.C为开放业务的服务器。通常情况下,左侧数据表示的客户端是无法访问C上的业务的,而B可以访问
5.配置命令
linux下在A设备上通过以下命令实现隧道的建立:
ssh -fgNL 3721:C:8888 user@B
选项L:正向代理
选项N:建立的ssh连接用于隧道转发流量,而不是用于管理
选项g:允许除自身以外的其他主机使用该ssh隧道转发数据,需要修改ssh服务端默认配置文件选项f:让命令创建的进程在后台运行,不占用前端终端资源
(二)反向代理
正向代理示意图
一样的配方,不一样的口味。
1.反向代理与正向代理的主要区别是ssh隧道建立时ssh客户端和服务端角色的不同。
2.A为ssh隧道服务端,但他也是隧道的入口,打开了一个3721的TCP端口,来监听希望通过隧道转发的数据。
3.B为ssh隧道客户端,同时也是ssh隧道的终点。
4.C为放业务的服务器。通常情况下,左侧数据表示的客户端是无法访问C上的业务的,而B可以访问
5.反向连接主要用在网络安全策略更加严格的场景下,外网A无法向内网B发起ssh连接,而B可以向A发起ssh连接。
6.配置命令
linux下在B设备上通过以下命令实现隧道的建立:
ssh -fgNR 3721:C:8888 user@A
选项R:正向代理
(三)动态代理
正向代理示意图
不一样的配方,不一样的口味。
1.动态代理与正、反向代理的主要区别是最终希望访问的服务不再是一个固定的IP地址上的资源。
2.A为ssh隧道客户端,也是隧道的入口,打开了一个3721的TCP端口,来监听希望通过隧道转发的数据。
3.B为ssh隧道服务端,同时也是ssh隧道的终点。B可以自如的访问一些A以及左侧客户端无法访问的服务。
4.缺省情况下A、B之间随带只能代理HTTP类型的服务。
5.配置命令
linux下在A设备上通过以下命令实现隧道的建立:
ssh -fgND 3721 user@B
选项D:动态端口代理
6.当在B上配置自己到自己的ssh动态端口隧道时,可以省略A作为隧道起始点的操作。此时可以在B上配置:
ssh -fgND 3721 user@B
此时示意图可表示为:
*** 部分描述可能不准确,请批评指正。