虽然我使用一些别名来做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隧道也可以访问它.
可以用非常简单的术语解释一下吗?除了这3个,还有其他一些流行的用途吗?谢谢.
for*_*sck 53
1)假设你从home连接到foo,你需要一个反向隧道(-R)
ssh -R 8080:localhost:3000 foo.mycompany.com
Run Code Online (Sandbox Code Playgroud)
这将使在foo上运行的进程能够localhost:8080在端口3000处连接并实际与您的家庭计算机通信.如果您希望工作中的其他计算机能够连接到foo:8080并在端口3000访问您的家用计算机,那么您需要
ssh -R 0.0.0.0:8080:localhost:3000 foo.mycompany.com
Run Code Online (Sandbox Code Playgroud)
但为了使这个工作你还需要这个选项来foo的sshd_config
GatewayPorts yes
Run Code Online (Sandbox Code Playgroud)
2)使用ssh创建http代理的最佳方法是使用socks.首先连接
ssh -D 8888 foo.company.com
Run Code Online (Sandbox Code Playgroud)
然后转到浏览器连接设置并启用代理连接,选择socks4/5和host:localhost,端口8888.然后输入http://bar.mycompany.com浏览器的地址栏.
3)现在您需要一个本地端口转发(-L).
ssh -L 3333:db.mycompany.com:3306 foo.mycompany.com
Run Code Online (Sandbox Code Playgroud)
这意味着您将能够localhost:3333从家用计算机进行连接,并且所有内容都将转发到db.mycompany.com:3306,就像连接是由foo.mycompany.com.主机数据库将foo视为客户端连接,因此您需要使用从foo工作时使用的相同用户名和密码登录.
添加-g标志将使您家庭网络中的其他计算机能够连接到您的计算机端口3333并实际访问db:3306.
分享我发现的一个很好的教程,其中包含一些图表: https ://iximiuz.com/en/posts/ssh-tunnels/
例如,使用笔记本电脑上的精美 UI 工具访问在线服务器的数据库(MySQL、Postgres、Redis 等)。
ssh -L [local_addr:]local_port:remote_addr:remote_port [user@]sshd_addr
Run Code Online (Sandbox Code Playgroud)
该-L标志表明我们正在启动本地端口转发。
它实际上的意思是:
local_port(可能在本地主机上)。remote_private_addr:remote_port您通过 SSH 连接到的计算机上。向外界公开本地服务,例如,将笔记本电脑中的开发服务公开到公共互联网上进行演示。
ssh -R [remote_addr:]remote_port:local_addr:local_port [user@]gateway_addr
Run Code Online (Sandbox Code Playgroud)
该-R标志表明我们正在启动远程端口转发。
SSH 隧道非常简单。它在一端打开一个侦听套接字。每当有人连接到该侦听套接字时,它都会打开从另一端到配置位置的相应连接,然后通过 SSH 链接在两者之间双向转发所有信息。
一个很老的问题,但看看这个页面是否有助于为你解释它,它有漂亮的图片等等。:)
https://www.ssh.com/ssh/tunneling/
基本上,SSH 隧道是一种隧道,可用于将(隧道)数据从一个地方传递到另一个地方,并进行加密。
它也常用于将流量(通过隧道,想想虫洞)路由到其他地方,这允许诸如通过防火墙隧道或重定向流量(加密端口转发)之类的事情。
假设您和服务器之间有防火墙。服务器可以访问其内部网络上的另一台服务器 (server2)。
[client]--------||------[server]----[sever2]
Run Code Online (Sandbox Code Playgroud)
假设您想访问server2上的 Web 服务器,并且由于显而易见的原因,您不能直接执行此操作。假设端口 22 (ssh) 在防火墙上打开。所以我们要做的是创建一个从server到server2的SSH 隧道(在server 上)。这意味着端口 22 上的任何(出站?)流量都将通过此隧道从 server:22 -> server2:80 发送。
[client]--------||------[server:22]======[sever2:80]
Run Code Online (Sandbox Code Playgroud)
所以(据我所知),如果我们连接到server:22,它应该server2: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 上找到了这个,很多答案对你需要的东西有非常清晰(和图片)的解释!
riv*_*ver -11
阅读手册页,特别是 -L、-R 和 -D 选项。我认为有人重写这个并可能引入错误是没有用的。如果您不明白,您可以提出更具体的问题。
-D 提供 SOCKS 代理,这是 ssh 隧道的另一个有用的应用。
| 归档时间: |
|
| 查看次数: |
32323 次 |
| 最近记录: |