ssh动态转发小记
ssh,一般常用来做远程登录管理,也就是连上远程机器,得到一个shell,然后交互式地在上面敲命令-看结果-再敲命令。
偶尔也会用在脚本里,做些自动化批处理上传下载的操作,但本质上也是用shell来执行一个字符串命令。
但是,ssh还有一个很重要的功能,即端口转发,这个功能更偏向于为其它程序提供服务,而基于shell的功能则可认为是更偏向于为人服务。
端口转发有三类:本地转发,远程转发,动态转发。
其中本地转发和远程转发并没有本质区别,都是在“localip:port”和"remoteip:port”之间建立安全的ssh连接,之外的事情则由请求建立此连接的应用程序自理。两者的区别仅在于是谁先向谁发起连接请求。一般来说都是会从本地发起,但如果远端处于内网防火墙里,那么就会类似ftp被动模式那样,由远端主动发起,这就叫所谓远程转发了。总之这两个术语的名字并不能很好的顾名思义,如果改为“本地发起的转发”和“远程发起的转发”可能更准确些。
动态转发则不一样,ssh本身不再仅是连接提供者了,它其实还承担了socks服务器的作用,这一点其实需要认真理解,而且在网上搜索看到的资料很少有讲清楚的,比如这一篇:(来自http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html)
八、绑定本地端口
既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性。
假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
$ ssh -D 8080 user@host
SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。
这个解释是很迷惑的,因为它没有说清楚数据到底发给了谁。在这里我们根本没有指定远程接收者,如果说接收者就是sshd自身的话那也很难理解,作为一个通用连接,收到的数据可能是任意格式协议的,都发给sshd有什么用它怎么处理呢?
其实还是看标准手册就有清楚的解释了:
-D [bind_address:]port
Specifies a local “dynamic” application-level port forwarding. This
works by allocating a socket to listen to port on the local side,
optionally bound to the specified bind_address. Whenever a connection
is made to this port, the connection is forwarded over the secure chan‐
nel, and the application protocol is then used to determine where to
connect to from the remote machine. Currently the SOCKS4 and SOCKS5
protocols are supported, and ssh will act as a SOCKS server. Only root
can forward privileged ports. Dynamic port forwardings can also be
specified in the configuration file.
这里关键在于说明了,sshd会根据收到的数据去猜测实际上这些数据要发给谁。怎么猜测呢?那当然是要事先规定好数据的格式的,也就是上面提到的socks协议格式。
可见,动态转发实际是指socks转发,也就是说sshd除了验证服务器这个第一身份外,其实还兼职当了socks服务器。这就又涉及到对socks协议的理解。于是我又bg了一把,大致了解如下:
socks是一个做代理转发的协议,socks服务器默认在1080端口监听,socks客户端连上后发接头暗号05 01 00,服务器则回05 00,表示对接成功。客户端再把目标ip:port发过去,服务器连上目标后,把它自己所用的port发回来。然后客户端就去连这个port,连上后正常收发数据,就像跟真正的目标在通信一样了,背后全是socks服务器在倒腾数据。socks协议有两个版本,socks4只支持tcp,socks5支持udp。
这样的话就很清楚了,也就是说sshd本身就是个socks服务器,用-D port host方式建立的动态转发连接,这个port实际是给socks客户端用的,并不是任何程序都能随便开个动态转发乱发数据。而socks协议本身通过转代理转发,(在接头通过后)以黑盒形式支持任何协议,这也许才是“动态”转发的含义吧!
-----------以下是做个实验测试--------------
首先,装一个正常的socks服务器,用来验证下socks客户端,比如浏览器的代理模式。
port search socks可以得到一堆与socks协议有关的软件,这里选择nylon做为server来测试。必须承认这个名字取得相当有才。。socks在此本意为缩写但原词却是袜子的意思,于是这作者给他写的服务器取名nylon,来个尼绒袜子,真绝配!
以前台应用模式(默认是后台服务)启动nylon:
sudo nylon -p 10800 -f -vvvvv
可以看到有提示打出,预料每当有连接进来,都会打出新提示,下面在chrome里做测试,刚好装了goagent插件,在里面添加一个代理模式,将socks代理选项设为127.0.0.1:10800,并切换到该模式,再去打开网页,果然,随着网页刷出,nylon的控制台上也刷出了log:
nylon: (localhost:51241 <=> tb-in-f94.1e100.net:https) Terminated connection
nylon: (localhost:51237 <=> tb-in-f199.1e100.net:https) Terminated connection
nylon: Connecting localhost:51505 <=> ec2-75-101-145-14.compute-1.amazonaws.com:http
nylon: Connecting localhost:51504 <=> ec2-75-101-145-14.compute-1.amazonaws.com:http
nylon: Connecting localhost:51510 <=> 203.208.36.26:http
nylon: Connecting localhost:51514 <=> 203.208.46.218:http
用ctrl-c将其关闭后再刷浏览器,提示代理不通,证实刚才确实通过nylon做了socks代理访问。
现在试试sshd兼职的socks服务怎样。直接以本机做server测试即可:
ssh -D 8192 abc@localhost
在chrome里修改代理端口为8192再一刷,刚才不通的网页又打开了,证实sshd兼职socks server确实有用!
满意收工睡觉了 。。
ssh动态转发小记的更多相关文章
- 【转】实战 SSH 端口转发
本文转自:http://www.ibm.com/developerworks/cn/linux/l-cn-sshforward/index.html,至于有什么用,懂的懂! 实战 SSH 端口转发 通 ...
- SSH 端口转发
第一部分 概述 当你在咖啡馆享受免费 WiFi 的时候,有没有想到可能有人正在窃取你的密码及隐私信息?当你发现实验室的防火墙阻止了你的网络应用端口,是不是有苦难言?来看看 SSH 的端口转发功能能给我 ...
- 实战 SSH 端口转发
转自实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业 ...
- [转载]实战 SSH 端口转发
实战 SSH 端口转发 通过本文的介绍,读者可以从中了解到如何应用 SSH 端口转发机制来解决日常工作 / 生活中的一些问题.学会在非安全环境下使用端口转发来加密网络应用,保护个人隐私以及重要商业信息 ...
- SSH端口转发(本地转发、远程转发、动态转发)
SSH端口转发 一:什么是端口转发? SSH 会自动加密和解密所有SSH 客户端与服务端之间的网络数据.但是,SSH 还能够将其他TCP 端口的网络数据通过SSH 链接来转发,并且自动提供 ...
- ssh动态端口转发
ssh本地和远程端口转发都需要固定的应用服务器IP和端口,但是很多情况下,应用的端口繁多逐个转发效率不高,而且一些应用使用不固定的端口,经常跳着使用端口,一些网站还不支持IP直接访问,这导致ssh本地 ...
- SSH25个命令 + 深入SSH端口转发细节
OpenSSH是SSH连接工具的免费版本.telnet,rlogin和ftp用户可能还没意识到他们在互联网上传输的密码是未加密的,但SSH是加密的,OpenSSH加密所有通信(包括密码),有效消除了窃 ...
- 公司内网Debian Server上的openvpnserver搭建并通过SSH隧道转发到广域网
因为戴维营公司在长沙的学员,研发人员和北京的研发人员须要协同研发,故须要让北京的兄弟们增加到长沙办公室的内网,訪问版本号 管理server,于是採用在内网server上搭建一个OpenVPN服务,并把 ...
- 玩转SSH端口转发
SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),**远程端口转发(Local Port Forwarding)**以及**动态端口转发(Dynamic Port ...
随机推荐
- Data Structure Array: Given an array of of size n and a number k, find all elements that appear more than n/k times
http://www.geeksforgeeks.org/given-an-array-of-of-size-n-finds-all-the-elements-that-appear-more-tha ...
- Unity Json解析IPA
今天看到一个unity 自带的解析json的IPA,感觉比litjson好用很多,废话不多,上代码 using System.Collections; using System.Collections ...
- bootstrap0
bootstrap模板为使IE6.7.8版本(IE9以下版本)浏览器兼容html5新增的标签,引入下面代码文件即可. <script src="https://oss.maxcdn.c ...
- sqlserver 实现数据库全文检索
--在执行该脚本程序之前启动sql server的全文搜索服务,即microsoft search服务 use huarui_db --打开数据库 go --检查huarui_db是否支持全文索引,如 ...
- 维度表, 事实表, 数据仓库, BI...
以前一直对维度表, 事实表, 数据分析, BI等概念等有一些模糊. 这几天的学习终于让这些有了一些眉目了: 维度表示你要对数据进行分析时所用的一个量, 比如你要分析产品销售情况, 你可以选择按类别来进 ...
- 一 Django框架介绍——用pycharm创建Django项目
Django框架介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVC的软件设计模式,即模型M,视图V和控制器C.它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内 ...
- hadoop_学习_00_资源帖
一.精品 1.虚无境的博客 随笔分类 - hadoop 二.参考资料 1.大数据学习之路(持续更新中...) 2.Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0 ...
- web网页打印的方法(浏览器通用)
Web打印组件jatoolsPrinter 应用web化,不论对开发商,还是对用户来说,实在是一种很经济的选择,因为基于 web的应用,客户端的规则很简单,容易学习,容易维护,容易发布.但对程序员来说 ...
- RouterOS(ROS)简单限速/单IP限速脚
暂无评论 有时企业环境,或个人使用环境需要针对不同IP设置较多条不同限速,可以使用以下脚本批量处理后,再针对性的修改. *脚本说明:“2 to 254”定义要设置受限IP的起始,后面“192.168. ...
- xcopy语法
xcopy语法 2007-02-09 13:29:45| 分类: 服务器 | 标签:xcopy语法 |字号 订阅复制文件和目录,包括子目录. 语法 xcopySource [Destination] ...