在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. PyQt5编程入门

    1  25行的弹出式闹钟 import sys import time from PyQt5 import QtCore from PyQt5.QtWidgets import QLabel from ...

  2. Kruskal 2015百度之星初赛2 HDOJ 5253 连接的管道

    题目传送门 /* 最小生成树(Kruskal):以权值为头,带入两个端点,自然的排序;感觉结构体的并查集很好看 注意:题目老头要的是两个农田的高度差,中文水平不好,题意理解成和平均值的高度差! */ ...

  3. IIR型高斯滤波的原理及实现

    二.实现 GIMP中有IIR型高斯滤波的实现,代码位于contrast-retinex.c中,读者可自行查看.下面给出本人实现的核心代码: #include"stdafx.h" t ...

  4. adb shell getprop,setprop,watchprops更改,查看,监听系统属性

    1.简介 每个属性都有一个名称和值,他们都是字符串格式.属性被大量使用在Android系统中,用来记录系统设置或进程之间的信息交换.属性是在整个系统中全局可见的.每个进程可以get/set属性.  在 ...

  5. windows session 管理

    Killing an Oracle process from inside Oracle I had a following situation few days ago – I was runnin ...

  6. [转].NET 4 并行(多核)编程系列之二 从Task开始

    本文转自:http://www.cnblogs.com/yanyangtian/archive/2010/05/22/1741379.html .NET 4 并行(多核)编程系列之二 从Task开始 ...

  7. mvc不登录的情况下无法跳转至其他页面--解决方法之一

    在每个控制器里,加以下方法 /// <summary> /// 在调用视图之前拦截非法用户 /// </summary> /// <param name="fi ...

  8. AJPFX对选择和冒泡两种排序的理解

    冒泡排序和直接选择排序都是排序中比较简单和容易实现的算法,先简单说说两者的区别:先以按照元素从小到大为:冒泡排序:将相邻元素两两比较,如果有比较大的,就把比较大的放在右边,这样的结果就是一轮排序完毕后 ...

  9. 【转】深入理解Android中的SharedPreferences

    SharedPreferences作为Android中数据存储方式的一种,我们经常会用到,它适合用来保存那些少量的数据,特别是键值对数据,比如配置信息,登录信息等.不过要想做到正确使用SharedPr ...

  10. java生成随机字符

    1.生成的字符串每个位置都有可能是str中的一个字母或数字,需要导入的包是import java.util.Random; //length用户要求产生字符串的长度 public static Str ...