80

虽然我使用一些别名来做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. 如果在家里,我无法访问 MySQL 数据库db.mycompany.com,但foo可以,如何db.mycompany.com使用ssh隧道也可以访问。

可以用非常简单的术语来解释吗?除了这三个之外,实际上还有其他流行的用途吗?谢谢。

4

5 回答 5

74

1)假设你从家里连接到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 和主机: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. 主机 db 会将 foo 视为连接的客户端,因此您需要使用从 foo 工作时使用的相同用户名和密码登录。

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

于 2011-03-12T10:46:30.903 回答
7

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

于 2011-03-12T09:20:38.963 回答
5

相当老的问题,但看看这个页面是否有助于为你解释它,它有漂亮的图片和所有。:)

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

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

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

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

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

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

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

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

我想以某种方式使用 SSH 本身就是用于旧telnet通信的 SSH 隧道。只是在大多数情况下,您听说 SSH 隧道,人们指的是它提供的(安全)端口转发功能,而无需访问防火墙管理员,这是许多黑客喜欢使用的一个漂亮的小功能绕过安全。

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

希望这可以帮助。

编辑

在 UNIX SO https://unix.stackexchange.com/questions/46235/how-does-reverse-ssh-tunneling-work上找到了这个,很多答案非常清楚(和图片)解释了你需要什么!

于 2018-09-26T00:56:07.753 回答
2

首先,我将解释 SSH:

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

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

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

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

ssh -D 8080 user@sshserverip
于 2014-11-07T04:19:29.817 回答
-11

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

-D 提供 SOCKS 代理,这是 ssh 隧道的另一个有用应用。

于 2011-03-12T05:51:47.377 回答