您的位置:首页 > 其它

SSh服务端口转发

2017-10-07 18:20 267 查看
SSH端口转发:

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

SSH 端口转发能够提供两大功能:

(1)、加密 SSH Client 端至SSH Server端之间的通讯数据;

(2)、突破防火墙的限制完成一些之前无法建立的TCP连接;

角色定义:

A. 本地服务器,想通过中间服务器B间接访问目标服务器C;

B. 中间服务器,类似于代理,A以B的名义去访问C;

C. 目标服务器,C看到的都是中间服务器B在访问自己;



本地转发:

ssh -L localport:remotehost:remotehostportsshserver

选项:

-f:后台启用

-N:不打开远程shell,处于等待状态

-g:启用网关功能

示例:

在A主机上执行:ssh –L 156:telnetsrv:23-fN sshsrv:该命令表示,建立了一条由A主机随机开启的一个端口—>ssh服务器之间(B主机的22端口)的隧道。A主机上的ssh服务监听自己主机的156端口,当有数据访问自己(A主机)的156端口时,数据便会经过隧道,发送给ssh服务端。(注意:本例中的数据就是telnet服务)ssh服务端(B主机)代替telnet客户端(A主机)向telnet服务端(C主机)发送请求!-fN,表示隧道搭好之后,在后台运行。

在A主机上执行:telnet 127.0.0.1 156:访问本机的156端口。此时,该命令就类似于在ssh服务器端执行了“telnet telnetsrv:23”
9cd9
的命令(注意:ssh服务端(B主机)不必安装telnet。因为只需要ssh服务端提供转发的功能)。当访问本机的156的端口时,被加密后转发到sshsrv的ssh服务,再解密,然后数据被转发到telnetsrv:23;

注意:在本地转发中,A主机:ssh服务的客户端,telnet的客户端;B主机:ssh服务的服务端;C主机:telnet服务的服务端。

data --->localhost:156--->localhost:XXXXX--->sshsrv:22--->sshsrv:YYYYY--->telnetsrv:23

 


远程转发:

远程转发的环境和目的与本地端口转发是一样的,远程准发只是不在本地服务器A上执行命令,而是在中间服务器B上执行;为什么不直接在服务器A自己身上执行命令呢?这个场景有别于本地端口转发的地方在于:A不能主动连接B但反之可以。比如A在外网,B、C在内网;而A去访问的时候,同样都是通过自己的IP和端口,同样首先建立AB之间的SSH通道,以服务器B的名义来访问目标服务器C。

ssh -R sshserverport:remotehost:remotehostportsshserver

示例:

在中间服务器(B)执行:ssh –R 9527:telnetsrv:23 –N sshsrv:中间服务器B会随机开启一个端口访问A机器的22端口,建立一条以ssh加密的通道。当A主机访问自己主机的9527端口的时候,会将数据传送给A自己主机的22端口,经过加密的通道,传送到中间服务器上。中间服务器收到数据后,ssh服务会随机开启一个端口,将数据发送给telnet服务器(C)的23端口上。

在A主机上执行:telnet 127.0.0.1 9527:让sshsrv(A主机)侦听自己的9527端口,如有访问时,就加密后,通过ssh服务转发请求到B主机的ssh的客户端,再由B主机解密后转发到telnetsrv:23;

注意:在本地转发中,A主机:ssh服务的客户端,telnet的客户端;B主机:ssh服务的服务端;C主机:telnet服务的服务端。

Data--->sshsrv:9527--->sshsrv:22--->localhost:XXXXX--->localhost:YYYYY--->telnetsrv:23



动态端口转发:(可以实现翻墙)

ssh本地和远程端口转发都需要固定的应用服务器IP和端口,但是很多情况下,应用的端口繁多逐个转发效率不高,而且一些应用使用不固定的端口,经常跳着使用端口,一些网站还不支持IP直接访问,这导致ssh本地和远程端口转发在一些使用上不是很方便,使用ssh动态端口转发可以解决以上问题。

当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet;

ssh -D 1080 root@sshserver

示例:

将A主机的firefox设置代理:socket proxy:127.0.0.1:1080

在A主机上执行:curl --socks5 127.0.0.1:1080 http://www.baidu.com
(https://www.chenyudong.com/archives/linux-ssh-port-dynamic-forward.html)这篇博客对于动态端口转发介绍的比较好

注意:要想理解ssh端口转发,需要理解,服务与端口其实是两个不同的概念(注意参考OSI网络模型)。

ssh命令,控制的只是ssh服务。

本地转发和远程转发本质是一样的,只不过是敲得命令不一样而已。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: