在RedHat提供的系统管理员指南中提到OpenSSH不止是一个安全shell,它还具有X11转发(X11 Forwarding)和端口转发(Port Forwarding)的功能。X11功能一般用于通过ssh连接到服务器端的图形界面,像远程桌面一样使用Linux服务器主机,客户端只要能访问服务器端并且服务器端已经安装了图形界面管理器(如GNOME、KDE、XFCE等)就可以通过SSH的X11转发功能实现远程桌面。

本文重点讲的是OpenSSH的另一个高级功能端口转发(本地端口转发,Local Port Forwarding),并着重列举一下具体有哪些较好的应用场景。对OpenSSH端口转发原理不怎么了解的其实可以参考代理服务器的功能,比如它和Nginx或Apache的网站转发器(代理)是一样的。它能实现客户端A通过访问服务器端B(执行SSH端口转发命令),从而通过服务器端B的某一个指定端口访问服务器端C提供的服务。

需求:

客户端A要访问服务器C所提供的服务,但客户端A并不能直接访问到服务器C

使用条件:

1.客户端A和服务器B之间可以互相访问,服务器B与服务器C之间可以互相访问,而客户端A与服务器C之间能否互相访问均可。

2.服务器B上需要运行SSH服务,并能支持Port Forwarding(支持端口转发,一般默认都支持)

步骤:

客户端A或服务器B上运行ssh客户端,执行命令“ssh -L 172.16.172.7:3389:172.16.172.33:3389 172.16.172.7”,其含义是:

(1)SSH到172.16.172.7

(2)172.16.172.7:3389:172.16.172.33:3389 表示客户端A可以通过连接172.16.172.7(服务器端B)的3389连接172.16.172.33(服务器端C)的3389端口

(3)如果第一个172.16.172.7设为空,即把172.16.172.7:3389:172.16.172.33:3389 变为3389:172.16.172.33:3389 ,则172.16.172.7(服务器端B)默认只监听127.0.0.1这个本地环回地址,失去了满足需求的意义。

(4) 注意,如果客户端A上的SSH客户端不支持这样执行(Linux系统自带的openssh-clients包提供的ssh都支持),则可以参考一些SSH客户端软件(如PUTTY、Xmanager的Xshell)的具体设置,或者直接在服务器B上执行上述命令

图1.Server B SSH自己,打开Port Forwarding

图2.Client A 远程桌面连接到Server B

图3:Server B中已经建立好的连接

图4:Server C中已经建立好的连接

图5.上述步骤的整体解释,上述步骤中采用的是第二种连接方式,即SSH Server B SSH到自己身上,建立好端口转发通道

应用场景:

1.内网穿透或者防火墙穿透。例如防火墙上映射或开放一台Linux主机的SSH端口,防火墙外的主机通过SSH到这台Linux主机,通过这台Linux主机就能访问这台LInux主机所能访问的一切主机(服务),实现远程代理访问。

2.安全规则穿透。与第一条道理相同,如果除了这台Linux主机以外的所有主机都不能访问,那么就可以通过这台Linux主机进行访问。

例子:

客户的数据中心中有一台具有公网IP地址A的CentOS6虚拟机H2,还有多台没有公网IP地址但有和CentOS6虚拟机H1相同内网网段和安全规则的IP地址B的虚拟机H2,那我在客户的数据中心外面即可通过这台CentOS6虚拟机H1访问虚拟机H2,实现了H2的无公网IP地址的远程访问(远程代理访问)。

原文地址:http://www.tuicool.com/articles/RNnmEz

OpenSSH高级功能之端口转发(Port Forwarding)的更多相关文章

  1. 端口转发 Port Forwarding (一)

    0x00First 最近发现一些好用的端口转发工具和技巧,计划认真梳理一下 SSH.NC.LCX.EW.FRP 0x01 SSH隧道端口转发 目前利用SSH隧道(SSH tunneling)进行端口转 ...

  2. SSH高级应用(端口转发)

    转发自:http://www.cnblogs.com/sting2me/p/5167730.html 基于SSH协议的端口转发 [前言] 最近一直在使用ssh协议的端口转发(隧道)功能,完成对内网空透 ...

  3. 路由器port触发与转发---Port Forwarding & Port Triggering

    What is Port Triggering? If you have not read my explanation of port forwarding do so now. You can f ...

  4. iptables 通讯端口转接(Port Forwarding)

    是一种特殊的DNAT操作,其作用是让一部电脑(通常是防火牆)担任其它电脑的代理伺服器(proxy).防火牆接收外界网络接传给它自己的包,然后改写包的目的地位址或目的端口,使其像是要送到內部网路其它电脑 ...

  5. Linux 通过rinetd端口转发来访问内网服务

    可以通过端口映射的方式,来通过具有公网的云服务器 ECS 访问用户名下其它未购买公网带宽的内网 ECS 上的服务.端口映射的方案有很多,比如 Linux 下的 SSH Tunnel.rinetd,Wi ...

  6. Android adb端口转发调试助手Packet Sender

    相信大家做过安卓开发或者安卓自动化测试开发的都离不开adb这个Android Debug Bridge这个工具,该工具有个很重要的功能就是端口转发.比如你在目标安卓机器端建立了一个服务来处理获取当前界 ...

  7. SSH Tunnel扫盲(ssh port forwarding端口转发)

    SSH的的Port Forward,中文可以称为端口转发,是SSH的一项非常重要的功能.它可以建立一条安全的SSH通道,并把任意的TCP连接放到这条通道中.下面仔细就仔细讨论SSH的这种非常有用的功能 ...

  8. SSH隧道:端口转发功能详解

    SSH系列文章: SSH基础:SSH和SSH服务 SSH转发代理:ssh-agent用法详解 SSH隧道:端口转发功能详解 1.1 ssh安全隧道(一):本地端口转发 如下图,假如host3和host ...

  9. 不同路由器下远程ssh登录Beaglebone系统(通过路由器端口转发,配合花生壳的DDNS功能)

    使用场景: 一般家庭设备都是通过路由器中转连上互联网的,而且运营商给家庭宽带分配的IP地址也是动态的.随时可能变动的.所以当程序员们离开家之后,是很难直接和家里的设备进行交互的.但是通过TPLINK路 ...

随机推荐

  1. C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)

    在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符.我就斗胆将他们命名为六大函数好了. 一.构造函数 c++primer中说过: ...

  2. iphone 开发Categories 、Extensions 区别 --转

    Category和Extension这两个概念,即便对于Java程序员,可能也会感到陌生.这是Objective C为程序员提供的两个强大的动态机制——简单地说,它们允许程序员为已有的对象添加新的方法 ...

  3. 创建表规范 lob 字段

    ORAClce 11g 提供如下特性: BasicfileOracle10g 及之前版本被称为basicfile Securefile11g中新增securefile 优点:集中写入缓存(WGC),4 ...

  4. SOLR-disMax查询参数

    dismax参数用于处理用户输入的简单短语,并根据字段的重要度进行加权查询,查询范围为多个字段区域.dismax会忽略搜索字符串中的 "AND","OR", & ...

  5. 如何修改phpmyadmin上传文件大小限制

    修改php配置文件,php.ini upload_max_filesize = 100M post_max_size = 100M 一般修改这2个就行了,然后重启wampserver 如果还不行,就执 ...

  6. 释放资源的一般范式——更锋利的C#代码小记

    public class Photo : IDisposable { //在Finalize函数中调用内部的Dispose方法 ~Photo() { //被自动回收时仅释放托管资源,不释放非托管资源 ...

  7. 通用maper无法获取实体类com.qmtt.model.PhWxUser对应的表名问题

    spring boot在采用了热加载后,可能会出现“无法获取实体类com.qmtt.model.PhWxUser对应的表名!”的异常, 解决办法 在resources新建一个文件夹META-INF,新 ...

  8. https为数据传输保驾护航

    为什么要使用https 谷歌官网已宣布,今年7月起,Chrome浏览器的地址栏将把所有HTTP标示为不安全网站. 在客户端与服务器数据传输过程中,http协议传输是不安全的,一般情况下,http协议的 ...

  9. ios---setContentOffset

    UIView * farmeView=[[UIView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,  self. ...

  10. es5/6数组遍历以及常用的一些方法

    数组的遍历方法 1...for(var i=0;i<arr.length;i++){ } ---------------------------------------------------- ...