在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. queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards

    题目传送门 /* 题意:两堆牌,每次拿出上面的牌做比较,大的一方收走两张牌,直到一方没有牌 queue容器:模拟上述过程,当次数达到最大值时判断为-1 */ #include <cstdio&g ...

  2. 小程序java解密

    <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16< ...

  3. Spring-bean(一)

    配置形式:基于xml文件的方式:基于注解的方式 Bean的配置方式:通过全类名(反射),通过工厂方法(静态工厂方法&实例工厂方法),FactoryBean 依赖注入的方式:属性注入,构造器注入 ...

  4. CF779C(round 402 div.2 C) Dishonest Sellers

    题意: Igor found out discounts in a shop and decided to buy n items. Discounts at the store will last ...

  5. 微信小程序组件解读和分析:一、view(视图容器 )

    view组件说明:    视图容器    跟HTML代码中的DIV一样,可以包裹其他的组件,也可以被包裹在其他的组件内部.用起来比较自由随意,没有固定的结构. view组件的用法: 示例项目的wxml ...

  6. 毕业设计:HomeFragment(二)

    一.长按item时的响应 在长按item时,我希望能让CheckBox显示出来,并且呼出全选.反选.取消菜单,以及下载.删除.移动.复制操作菜单. 我在具体实现的时候发现处理item布局是一个很大的问 ...

  7. .htaccess重写规则失败

    开启mod_rewrite.so LoadModule rewrite_module libexec/apache2/mod_rewrite.so 重启服务 sudo apachectl restar ...

  8. react基础语法(一)元素渲染和基础语法规则

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. Unity3D_最简单的开始界面_结束界面

    开始界面1.创建一个新的场景添加button 2.C#脚本LoadingGame.cs using System.Collections;using System.Collections.Generi ...

  10. app支付宝授权登录获取用户信息

    由后台进行地址的拼接(前台进行授权) // 生成授权的参数 String sign = ""; Long userId1 = SecurityUser.getUserId(); S ...