SSH Tunnel (port forwarding) 的一些应用(转帖)

SSH Tunnel (port forwarding) 的一些应用

ssh(secure shell)是一种对数据进行加密安全传输的协议。利用ssh工具可以非常方便的登录远程提供有ssh服务的主机,也可以很方便的进行文件传输。利用 ssh tunnel 可以进行端口转发(port forwarding), 它在ssh连接上建立一个加密的通道。创建了ssh tunnel之后,可以突破一些网络的限制访问不能直接访问的资源。

ssh tunnel分为三种,本地(L),远程(R)和动态(D)。下面以一些简单的实例进行说明。假设本地的IP为l1.l2.l3.l4,远程有一台ssh主机的ip为r1.r2.r3.r4。

本地端口映射(L)

可能的用途:本地的机器不能访问一个网站比如www.twitter.com,但是远程的机器可以访问。你可以从本地机器连接到远程的这台机器。现在希望在本地可以访问www.twitter.com。

在远程主机上(或者登录过去)执行命令

ssh -NfL r1.r2.r3.r4:8086:www.twitter.com:80 r1.r2.r3.r4

将twitter.com的web服务端口80映射到远程这台机器上。

然后在本地机器访问

http://r1.r2.r3.r4:8086

就能实现对twitter.com的访问。

如果在远程主机上执行的是如下命令

ssh -NfL 8086:www.twitter.com:80 r1.r2.r3.r4

则不能在本地访问远程主机的8086端口。这时只能在远程主机上访问http://localhost:8086。没有实际意义。

远程端口映射(R)

可能的用途:你回到了家或者在外要ssh连接学校或者公司的ssh主机,但是由于网关等原因不允许你这样做。不过你可以实现从学校或公司到处在外网上的家里或者其它一台服务器的连接。

在学校或者公司的本地主机上执行

ssh -NfR 8086:localhost:22 r1.r2.r3.r4

将本地的ssh服务端口映射到远程机器的8086端口。

回家了或者在外时先登录到远程的那台机器上,用命令

ssh -p 8086 localhost

即可实现对公司或者学校内网机器的ssh连接。

动态端口映射(D)

可能的用途:因为防火墙等因素本地机器不能访问某些资源,但是远程ssh主机可以访问。你可以从本地ssh到远程那台主机。这时你希望用远程主机做代理以方便本地的网络访问,因为最先介绍的本地端口映射只能对指明的个别网站进行访问。

在本地执行命令

ssh -NfD 8086 r1.r2.r3.r4

这样就建立了一台Socket代理机器,接着在浏览器上设置Socket代理:地址是localhost,端口是8086。从此以后,你的访问都是加密的了,而且走的是远程主机,IP变为了远程主机的IP,一些不能直接访问的资源通过这个代理可以访问。

这种代理称为ssh tunnel proxy。为了更方便的使用ssh tunnel proxy,需要让ssh登录免密码,ssh自动登录,浏览器按照规则自动选择代理。这些在以前的文章Linux下简单的ssh代理与穿墙中有详细说明。如果没有可用的ssh帐号,可以在cjb.net申请。

关于端口的一些说明
  • 1-1023端口只有root才能开启。大于1023的闲置端口可以使用。
  • 可以用命令

    lsof  -i:8086

    查看具体端口8086的使用状况。

SFTP与SSH

SFTP(SSH File Transfer Protocol)从字面上看就是基于ssh的ftp文件传输协议。比一般的ftp传输协议安全性更高。因为它基于ssh,所以提供了sftp的服务器都 有ssh服务可用,即使ssh交互界面被禁。用ssh tunnel proxy 进行socket代理时,我们其实根本就不需要交互界面。所以同样可以用sftp服务器实现代理。方法同Linux下简单的ssh代理与穿墙这篇文章中一样,使用ssh无交互登录就行。

一般的C-panel空间都至少有sftp服务。在控制面板里找到sftp服务的端口就是ssh服务的端口了。然后就可以实现ssh tunnel proxy了。

 
 
 

猜你喜欢

转载自cjb.iteye.com/blog/2290636