我对ssh端口转发以及ssh本地和远程端口转发之间的区别感到困惑。您能详细举例说明一下吗?谢谢!

评论

@slm真的吗?全文中都没有“本地”或“远程”字样,因此应该是重复的...?

@HaukeLaging-谢谢,我链接了错误的一个,这就是我的意思。反向SSH隧道如何工作?抱歉。

#1 楼

我已经绘制了一些草图




本地:-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost:onPort connectToHost表示:与ssh连接以connectToHost,并将所有连接尝试转发到本地sourcePortonPort机器上的端口forwardToHost,该端口可以从connectToHost机器访问。


远程:-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost:onPort connectToHost意味着:使用ssh连接到connectToHost,并将所有尝试连接到远程sourcePort到名为onPort的计算机上的端口forwardToHost,可以从本地计算机访问该端口。


示例
1的示例
ssh -L 80:localhost:80 SUPERSERVER

您指定到本地端口80的连接将转发到SUPERSERVER上的端口80。这意味着,如果有人使用Web浏览器连接到您的计算机,则他将获得SUPERSERVER上运行的Web服务器的响应。您在本地计算机上没有运行Web服务器。
示例2
ssh -R 80:localhost:80 tinyserver

您指定,与tinyserver的端口80建立的连接将转发到您的端口80本地机器。这意味着,如果有人使用Web浏览器连接到小型且速度较慢的服务器,则他将获得在本地计算机上运行的Web服务器的响应。 tinyserver的磁盘空间不足,无法容纳大型网站,没有任何webserver在运行。但是连接到tinyserver的人们是这样认为的。
更多示例
其他情况可能是:功能强大的计算机在五个不同的端口上运行着五个Web服务器。如果用户使用其Web浏览器连接到端口80上的五个tinyservers中的一个,则该请求将重定向到功能强大的计算机上运行的相应webserver。
ssh -R 80:localhost:30180 tinyserver1
ssh -R 80:localhost:30280 tinyserver2
etc.

也许您的机器只是功能强大的服务器和小型服务器之间的连接。那么,将是(对于一个玩的tinyserver拥有自己的web服务器):
ssh -R 80:SUPERSERVER:30180 tinyserver1
ssh -R 80:SUPERSERVER:30280 tinyserver2
etc


评论


感谢您的详细回答。但是我仍然对数据流感到困惑。在示例1中,某人连接到我的计算机并向我发送请求,然后我将该请求发送到SUPERSERVER,然后SUPERSERVER向我发送了响应数据,然后我将数据发送给了某人?对?

–user2886717
2014年2月20日在2:23



该请求将发送到端口80。您的ssh正在该端口上侦听并获取数据(请求),并通过ssh连接将其秘密移动到SUPERSERVER的sshd。 SUPERSERVER sshd将此数据(请求)重新发送到localhost的端口80(这是SUPERSERVER,因为localhost引用本地计算机)。然后一直返回。也许我应该添加一张图纸。

–erik
2014-2-20 14:02



优秀的!这些草图的交流方式比我刚刚阅读的10篇博客文章更多,而且速度更快。

–devth
2015年10月7日15:01

@RobinNemeth:是的,如果从远程或本地计算机启动,本地和远程转发都可以达到相同的效果。但是您的第一个命令可能会更容易,因为如果您从SUPERSERVER启动它,则只能引用它的本地主机(SUPERSERVER的本地主机)。即SUPERSERVER $ ssh -R 80:localhost:30180 tinyserver(我的第三个映像)。

–erik
17年6月6日在1:16



那-D呢?

– CMCDragonkai
18年5月9日在1:44

#2 楼

本地端口转发

ssh创建一个附加的本地端口,它将转发到远程系统上的端口。

示例

ssh -L 8080:127.0.0.1:80 user@webserver


然后在浏览器中使用本地使用URL http://localhost:8080/

,它将连接到本地计算机端口8080,ssh将转发到远程ssh,然后向127.0.0.1:80发出请求。注意127.0.0.1实际上是远程服务器的本地主机,但是它可能是远程计算机网络上可用的主机/ IP。

远程转发

用ssh创建监听端口在远程计算机上,它将转发(反向)到本地ssh以继续转发。

ssh -R 10123:127.0.0.1:123 user@webserver


因此,在ssh连接到Web服务器之后,远程ssh创建并lsitens在端口10123上。连接到10123的Web服务器上的进程将使用ssh将其拾取并将其发送回本地计算机的ssh,后者将其发送到127.0.01:123端口。