问题我想知道如何隧道服务器上的请求(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