有人可以用简单的方式解释SSH隧道吗?

时间:2011-03-12 05:43:32

标签: ssh ssh-tunnel

虽然我使用一些别名来做ssh隧道或反向隧道,但我从来不知道它是如何工作的。有人知道如何以非常简单的方式解释它吗?

我认为3个主要用途是:

首先,我可以使用家用电脑ssh到foo.mycompany.com,而无需使用任何密码 (foo是工作中的服务器)

1)如何让foo.mycompany.com:8080转到我的家用电脑localhost:3000

2)如果在家,我无法访问http://bar.mycompany.com,但foo可以访问bar,如何让家庭计算机能够访问http://bar.mycompany.com

3)如果在家,我无法在db.mycompany.com访问MySQL数据库,但foo可以,如何使用db.mycompany.com隧道访问ssh

可以用非常简单的术语解释一下吗?除了这3个,还有其他一些流行的用途吗?感谢。

5 个答案:

答案 0 :(得分:47)

1)假设你从home连接到foo,你需要一个反向隧道(-R)

ssh -R 8080:localhost:3000 foo.mycompany.com

这将使在foo上运行的进程能够连接到localhost:8080并实际通过端口3000与您的家庭计算机通话。如果您希望工作中的其他计算机能够连接到foo:8080并访问您的家计算机在端口3000,然后你需要

ssh -R 0.0.0.0:8080:localhost:3000 foo.mycompany.com

但要使其工作,你还需要这个选项来foo的sshd_config

 GatewayPorts yes

2)使用ssh创建http代理的最佳方法是使用socks。首先连接

ssh -D 8888 foo.company.com

然后转到浏览器连接设置并启用代理连接,选择socks4 / 5和host:localhost,端口8888.然后在浏览器的地址栏中输入http://bar.mycompany.com

3)现在你需要一个本地端口转发(-L)。

ssh -L 3333:db.mycompany.com:3306 foo.mycompany.com

这意味着您可以通过家庭计算机localhost:3333进行连接,所有内容都会转发到db.mycompany.com:3306,就像foo.mycompany.com建立连接一样。主机数据库将foo视为客户端连接,因此您需要使用从foo工作时使用的相同用户名和密码登录。

添加-g标志将使您家庭网络中的其他计算机能够连接到您的计算机端口3333并实际访问db:3306。

答案 1 :(得分:3)

SSH隧道非常简单。它在一端打开一个侦听套接字。每当有人连接到该侦听套接字时,它会打开从另一端到配置位置的相应连接,然后通过SSH链接在两者之间转发所有信息。

答案 2 :(得分:2)

首先,我将解释SSH:

SSH 是远程登录shell,可帮助您使用加密连接来连接远程计算机。因此,一旦您与任何远程主机建立了ssh连接,主机之间的连接就是安全且加密的。

SSH隧道通过SSH安全连接路由您的流量。

简单来说,SSH隧道只是一个连接被另一个连接封装。通过将此作为优势,我们使用SSH客户端创建隧道。

以下命令可帮助您创建简单的socks代理

ssh -D 8080 user@sshserverip

答案 3 :(得分:1)

一个很老的问题,但是看看此页面是否对您有所帮助,其中包含漂亮的图片以及所有内容。 :)

https://www.ssh.com/ssh/tunneling/

基本上,SSH隧道是一种隧道,可用于将数据从一个地方传递(隧道)到另一个地方,并进行加密。

它也通常用于将流量(通过隧道,认为是虫洞)路由到其他地方,这允许通过防火墙建立隧道或重定向流量(加密端口转发)之类的事情。

假设您与服务器之间有防火墙。该服务器可以访问其内部网络上的另一台服务器(server2)。

[client]--------||------[server]----[sever2]

假设您要访问 server2 上的Web服务器,由于明显的原因,您不能直接执行此操作。假设在防火墙上打开了端口22(ssh)。因此,我们要做的是创建一个 SSH隧道(在 server 上),从 server server2 。这意味着端口22上的任何(出站?)流量都将通过此隧道从server:22-> server2:80 中发送。

[client]--------||------[server:22]======[sever2:80]

因此(据我所知),如果我们连接到 server:22 ,它将使用此新的SSH隧道将端口22上的流量重定向到server2:80上的Web服务器。 (据我了解,数据仅在隧道中加密,因此,如果您想知道server:80是否必须为SSL,则最终将是解密数据)。

我以某种方式假设使用SSH本身就是用于旧telnet通信的SSH隧道。只是在您大多数时候听说SSH隧道传输时,人们都在指它提供的(安全)端口转发功能,而无需访问防火墙管理员,这是许多黑客喜欢使用的一个很棒的小功能。避开安全性。

出于更合理的理由;如果您受到防火墙等的限制,或者想要保护两台计算机之间的流量(如SSH程序一样),那么这是将某些流量中继到在不同端口上工作的内部服务器的好方法。

希望这会有所帮助。

编辑

在UNIX SO https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work上找到了这个答案,给出了很多答案,并对您的需求进行了非常清晰的说明(图式)!

答案 4 :(得分:-9)

阅读手册页,特别是-L,-R和-D选项。我不认为有人重写这个,并可能引入错误,这是有用的。如果你不理解它,你可以提出更具体的问题。

-D给出了SOCKS代理,这是ssh隧道的另一个有用的应用。