反向从服务器到笔记本电脑的SSH隧道

问题我想知道如何隧道服务器上的请求(debian)到我的笔记本电脑上的端口80使用SSH隧道。

问题我可以用下面的命令打开一个隧道,这个命令行为并不像我想的那样:

ssh -R 4445:localhost:80 [email protected] 

运行这个并在example.com上获得一个shell后,下面的命令按预期执行,返回我的笔记本电脑上托pipe的网页:

 wget localhost:4445 

但是,当试图使用example.com:4445而不是localhost:4445运行这个相同的命令时,我得到一个连接被拒绝。

额外信息:我也尝试使用shorewall写一个转发规则:

 DNAT net $FW:127.0.0.1:4445 tcp 4446 

然后尝试

 wget example.com:4446 

当wget在以上任何一种情况下失败,我得到这个:

 --2011-02-16 13:48:26-- http://example.com:4446/ Resolving example.com... 70.90.XXX.XX Connecting to example.com|70.90.XXX.XX|:4446... failed: Connection refused. 

任何想法去哪里从这里? 而且,如果有不同的/更好的方法来达到这个效果,我完全接受这个想法。

编辑感谢您的build议! 试过以下几点:

 ssh -R example.com:4445:localhost:80 [email protected] 

 ssh -R :4445:localhost:80 [email protected] 

然后当运行与上面相同的wget时,返回相同的错误。 我也许应该提到这个服务器有两个接口(eth0 public eth1 private)。

编辑

我是一个白痴:(不得不设置

 GatewayPorts yes 

在sshd_config中。 感谢大家的帮助!

ssh是出于安全原因configuration的,以使新的隧道在本地主机上侦听。 你必须使用:

 ssh -R :4445:localhost:80 [email protected] 

从openssh的手册页:

  -R [bind_address:]port:host:hostport 

指定将远程(服务器)主机上的给定端口转发给本地的给定主机和端口。 这是通过分配一个套接字来监听远程端口,每当连接到这个端口时,连接通过安全通道被转发,并且从本地机器连接到主机端口hostport。

端口转发也可以在configuration文件中指定。 只有在远程机器上以超级用户身份login时,才能转发特权端口。 IPv6地址可以通过将地址封装在方括号中或使用其他语法来指定:[bind_address /] host / port / hostport。

默认情况下,服务器上的监听套接字将仅绑定到回送接口。 这可以通过指定一个bind_address来覆盖。 一个空的bind_address或地址'*'表示远程套接字应该监听所有的接口。 如果启用了服务器的GatewayPorts选项,则指定远程bind_address将会成功(请参阅sshd_config(5))。

首先要记住的是隧道有一个特定的终点。 该端点不一定是客户端或服务器,但数据仅在客户端和服务器之间进行encryption。

如果你想在服务器上build立一个连接来连接到example.com,你可以运行

  ssh -R 4445:example.com:80 [email protected] 

服务器上的任何人连接到本地主机:4445数据包将隧道encryption到您的客户端。 从你的客户端,数据包将不encryption地传到example.com:80。 SSH不会对您的连接协议进行任何分析,数据包只是一端走到另一端。

一个隧道只能去一个端点。 如果你想要去别的地方(比如example.org),你需要closuresssh连接,并用-R 4445:example.org:80创build一个新连接。 如果你想连接到example.com和example.org,你需要设置两个不同的本地端口的隧道: -R 4445:example.com:80 -R 4446:example.com:80

默认情况下,隧道只能“来自”一个地方(服务器的localhost用于-R隧道,用户的localhost用于-L隧道)。 对于-R隧道,如果您在服务器的sshd_config文件中启用了GatewayPorts ,那么您可以告诉它侦听服务器的IP地址,以便能够连接到服务器的任何人:

 ssh -R server:4445:example.com:80 ... 

然后, 任何能够到达服务器:4445的人都会将其数据包传送到服务器,服务器会将其encryption传送给客户端,然后客户端将其encryption发送到example.com:80。

问题是你正在试图打开example.com:4445端口,这是不是真的打开。

如果要在wget命令或浏览器中引用example.com时在本地主机上命中隧道端口4445,则需要将条目添加到/ etc / hosts文件

 127.0.0.1 example.com 

这将使您能够在执行时命中本地主机上的隧道端口

 wget example.com:4445 

在这里build立隧道有用的其他东西是,如果你打算定期使用它是设置.ssh/config文件,并像这样做块。

 Host example Hostname example.com User someuser LocalForward 4445 localhost:80 

这将简单地通过调用ssh example将example.com中的端口80隧道到localhost:4445