利用SSH端口转发实现跨机器直接访问
在实际项目测试中经常会遇到数据库操作,但是因为公司安全问题,访问数据库往往需要通过跳板机。但通过跳板机,测试效率大打折扣,因此通过使用SSH端口转发,从而达到跨机器直接访问数据库。实际项目中的应用会比下面内容相对复杂一些,但万变不离其宗,基本原理是一样的。
SSH简介
SSH是什么?
SSH是一种协议,是一种有关如何在网络上构建安全通信的规范。SSH的协议涉及认证、加密、网络上传输数据的完整性。具体而言,SSH具有客户端/服务器(C/S)结构,SSH在计算机之间建立网络连接,并充分保障连接的双方是真实可信的(认证),该连接传输的所有数据不会被窃听(加密),不会被修改(完整)。
基于SSH的产品(即实现了SSH协议的产品)可能包含客户端或服务器,也可能都包含。Unix通常都包含有客户端和服务端;其他平台一般仅包含客户端。
术语:SSH协议和产品
经常会见到SSH、SSH-1、SSH-2、ssh等等各种特别相似的词汇,很容易让大家有误解,这里就将这些进行简单说明,方便后续大家理解。
SSH:通用的术语,泛指SSH协议或SSH软件产品
SSH-1:SSH协议版本1
SSH-2:SSH协议版本2
SSH1:实现SSH-1 的一个产品(软件),也是最早的SSH软件
SSH2:实现了SSH-2的一个商业产品
OpenSSH:是OpenBSD项目的产品,它同时实现了SSH-1协议和SSH-2协议
ssh:运行安全终端会话和远程命令的客户端程序,是产品的一个子集,即客户端部分
SSH的功能
1、 安全远程登录
说到远程登录不得不提起来Telnet协议,下面就对telnet和ssh进行简单对比,从而帮助大家理解ssh的安全远程登录功能。
- Telnet:Telnet为用户提供了在本地计算机上完成远程主机工作的能力。但Telnet不是一种安全通信协议,因为它并不使用任何安全机制,通过网络/互联网传输明文格式的数据,包括密码,所以谁都能嗅探数据包,获得这个重要信息。
- SSH:SSH是一种非常安全的协议,因为它共享并发送经过加密的信息,从而为通过互联网等不安全的网络访问的数据提供了机密性和安全性,SSH = Telnet + 安全机制。
2、安全文件传输
传统的文件传输程序(ftp、rcp等)都不能提供安全解决方案,使用SSH,只需要使用一个安全拷贝命令(scp)就可以在计算机之间安全传输文件。
3、 安全执行远程命令。例如 ssh nick@xxx.xxx.xxx.xxx "pwd; cat hello.txt"
4、访问控制
假设用户允许另外一个人使用自己的计算机账号,但他只能用于特定目的。例如,在你出差时,允许秘书使用你的账号替你阅读email,但不能执行其他操作。使用SSH,你不用把密码告诉秘书,也不用修改密码就可以授权秘书访问自己的账号,并限定他只能运行邮件程序。
5、端口转发
SSH能为另外一个应用程序的数据流提供透明的加密措施,从而保护其他TCP/IP应用程序,后面会详细解释关于SSH的端口转发功能。
常见的SSH产品

详解SSH端口转发
SSH使用的传输机制是TCP/IP,通常使用的是服务器的TCP端口22,并对经过连接传输的数据进行加密/解密操作。SSH端口转发就是SSH对其他应用程序在别的TCP端口上建立的TCP/IP传输进行加密和解密。Telnet、SMTP、IMAP和其他一些基于TCP/IP的不安全协议都可以将其连接通过SSH转发变得安全。SSH端口转发也叫做隧道传输,因为SSH连接提供了一条安全的“隧道”,其他TCP/IP连接可由此经过。

如上图所示,使用了端口转发之后,TCP 端口 A 与 B 之间现在并不直接通讯,而是转发到了 SSH 客户端及SSH服务端来通讯,从而自动实现了数据加密并同时绕过了防火墙的限制。
有一点需要注意的是,SSH端口转发 是TCP使用的一种通用代理机制,而且只能用于TCP/IP协议。如果协议不是基于TCP的,比如基于UDP的DNS、DHCP的,就不能使用端口转发机制。
本地转发分析
假设你在家里有一台电脑名主机H,上面运行着某个支持IMAP的email阅读器,你想连接到服务器主机S上的IMAP服务器,从而读取并发送邮件。通常,这个连接是不安全的,你的邮箱账号、密码在IMAP服务器和客户端之间明文传输,我们可以使用SSH端口转发,透明地将IMAP连接重新路由,使其通过SSH安全地对连接上的数据进行加密。
语法是这样的:ssh -L <本地监听端口号>:<目的主机>:<目的服务的端口号> <隧道终点主机>
具体到该例子:ssh –L 端口Y : S : 端口143 S
-L 表示是本地转发,此时该TCP服务的客户端与SSH客户端同在H上。后面接着三个值,由冒号分开,分别表示:需要监听的本地端口Y,目的主机(S),目的服务的端口号143(IMAP服务端通用的端口号是143)。
这个命令可分开下面两个步骤理解:
- Hi,本地的ssh客户端,请你在本地建立一个监听端口,凡是到这个端口的数据,都请你通过ssh 通道传给ssh服务端
- Hi,隧道终点主机,请你收到我的数据之后,把数据转到我制定的目的主机和目的服务端口上
通过端口转发,整个数据链路由原来(H,X)--> (S,143)转为下面几步
- (H,X)--> (H,Y),家中H上的IMAP客户端向本地的Y端口发送数据,其中Y就是本地端口转发时SSH客户端新建立的本地监听端口
- (H,Z)--> (S,22),家中H上的SSH客户端读Y端口数据,加密数据,利用SSH通道,将加密后数据发送到S
- (S,W)-->(S,143),SSH服务端将收到的加密数据解密,然后将其传给S的143端口上监听IMAP的服务器

除了本地转发还有远程转发,本次解决项目中实际问题时未涉及使用远程转发技术,因此不做详细介绍,感兴趣的可私下了解。
利用本地转发技术实现跨机器直接访问
现在很多公司为了加强网络安全,都会使用跳板机,所谓跳板机就是一台服务器,维护人员在维护过程中,首先要统一登录到这台服务器(跳板机)上,然后从这台服务器(跳板机)再登录到目标设备进行维护。于是我们面临一个情况,本机ssh->跳板机->目标机器,而跳板机一般作为通道,提供的权限很低,很多命令无法执行,这个限制会让我们工作效率大大降低。我们利用前面的SSH本地端口转发技术来彻底解决该问题吧!
我们将上面的描述图形化,见下图。

图中的“我”,现在是要访问内部网站的192.168.1.0/24网段里面的服务器,然而由于不在一个网段,我是不可以直接ssh到内部网络的服务器。通常的做法是先ssh到“SSH Server”,然后再在ssh server上访问内部网站的服务器。我能不能不用上ssh server就直接ssh到内部服务器呢?
结合前面的SSH本地端口转发,我可以这样做:
1、挖隧道
ssh –L 11125 : 192.168.1.2 : 22 [user@10.1.1.1](mailto:user@10.1.1.1)
在本地电脑创建监听端口:11125,192.168.1.2:22就是我们无法直接访问到目的主机及端口号,10.1.1.1就是我们这次挖隧道的终点主机,即可访问的SSH服务端
2、使用隧道
如果我们希望继续使用的TCP服务还是ssh客户端,因此我们就需要再打开一个ssh客户端。
ssh –p 11125 localhost
这行命令看起来是说,用ssh连接到本地电脑的端口11125上。结合刚才步骤1建立的隧道,这条命令就会被转发到跳板机10.1.1.1,然后跳板机会把这个ssh命令转发到目的主机192.168.1.2。
当然我们还可以使用其他服务,例如连接数据库,我们只需要连接当前主机11125端口即实现了连接在服务器192.168.1.2的数据库了。
到此,我们已经完美的实现了跨机器直接访问的目的。
作者:桃子妈咪
链接:https://www.jianshu.com/p/b22d765ec9ef
來源:简书
插播:金融壹账通质量开放平台现提供测试一站式解决方案,包括UI自动化、测试过程管理、app评测、接口自动化、接口压测、舆情监控等测试服务,欢迎访问:http://fit-stg1.jryzt.com/Hyperion-server/html/index.html。
利用SSH端口转发实现跨机器直接访问的更多相关文章
- 利用SSH端口转发实现远程访问内网主机远程桌面(一) 建立SSH转发
近期家里更换了移动的宽带,拨号后拿到的是10开头的内网IP,就不能像之前一样通过路由器的端口映射实现从外网访问主机的远程桌面.这种情况下可以利用一台具有公网IP的服务器充当中转,利用SSH的隧道转发功 ...
- SSH25个命令 + 深入SSH端口转发细节
OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃 ...
- Linux:ssh端口转发详解
ssh是个多用途的工具,不仅可以远程登录,还可以搭建socks代理.进行内网穿透,这是利用它的端口转发功能来实现的. 所谓ssh端口转发,就是在ssh连接的基础上,指定 ssh client 或 ss ...
- [转载]详解ssh端口转发(二)
关于使用ssh portforwarding来进行FQ的操作,网络上已经有很多很好的文章,我在这里只是画两个图解释一下. 首先要记住一件事情就是: SSH 端口转发自然需要 SSH 连接,而 SSH ...
- 【转】实战 SSH 端口转发
本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通 ...
- SSH 端口转发
第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我 ...
- 实战 SSH 端口转发
转自实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业 ...
- Linux SSH端口转发
SSH端口转发分为两种,一种是本地端口转发,又称为本地SSH隧道.一直是远程端口转发.SSH端口转发,还必须指定数据传送的目标主机,从而形成点对点的端口转发. 本地端口转发 假定有三台主机A. ...
- SSH端口转发详解及实例
一.SSH端口转发简介 SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据.但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫 ...
随机推荐
- [置换群&Polya计数]【学习笔记】
昨天看了一下午<组合数学>最后一章然后晚上去看别人的blog发现怎么都不一样,我一定是学了假的polya 其实是一样的,只不过<组合数学>没有太多的牵扯群论.于是又从群论角度学 ...
- XSD详解三 - 复合元素+总结篇
一.复合元素介绍 1.什么是复合元素? 复合元素指包含其他元素及/或属性的 XML 元素. 有四种类型的复合元素: 空元素 包含其他元素的元素 仅包含文本的元素 包含元素和文本的元素 注释:上述元素均 ...
- qt中的事件机制
事件 1.QEvent -->类型 -> QKeyEvent QEvent::KeyRelease QEvent::MouseMove -> QMouseEvent 2.事件处理过程 ...
- 用Markdown写微信公众号文章
目前微信公众号的编辑器是不支持Markdown语法的,那怎么办呢? 有一款叫Markdown Here的插件可以解决这个问题(支持Chrome.Firefox.Safari). 官方网站:http:/ ...
- 日程管理 FullCalendar
日程管理,采用著名组件FullCalendar日历插件实现FullCalendar提供了丰富的属性设置和方法调用,开发者可以根据FullCalendar提供的API快速完成一个日历日程的开发1.实现按 ...
- Java导出freemarker实现下载word文档格式功能
首先呢,先说一下制作freemarker模板步骤, 1. 在WPS上写出所要的下载的word格式当做模板 2. 把模板内不固定的内容(例:从数据库读取的信息)写成123或者好代替的文字标注 3. 把固 ...
- 换行符\r \n LF
前言:在对照PSR-2规范时,看到文件结尾必须要以Unix LF(linefeed)结尾,不懂查~ 来源于:http://www.cppblog.com/prayer/archive/2009/08/ ...
- 对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。 经过若干次这样的变换,一定会使n变为1
对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半.经过若干次这样的变换,一定会使n变为1.例如,3→10→5→16→8→4→2→1.输入n,输出变换的次数.n≤10 9 .样 ...
- 初识vue——起步
一.目录结构: 我们经常使用的是以下几个目录: 1.assets:静态资产文件:在vue组件中,所有组件中,所有模板和CSS都会被vue-html-loader和css-loader解析,并查找资源u ...
- Shell脚本的基本流程控制
if else read -p '请输入分数:' score if [ $score -lt 60 ]; then echo '60分以下' elif [ $score -lt 70 ]; then ...