远程服务器上的端口9999需要通过本地端口9990上的SSH隧道进行访问,以避免出现防火墙。
我正在使用这个命令来SSH隧道:
ssh -N -i share.pem -L 9990:`ecshare`:9999 ubuntu@`ecshare`
ecmy包含ec2实例的ip。 作为一个基准,我可以用这个命令ssh并获得一个远程shell:
ssh -i share.pem ubuntu@`ecshare`
但是,当我在本地提示符下尝试此操作时:
curl -i -X GET http://localhost:9990
我在隧道开始的shell上得到这个:
channel 2: open failed: connect failed: Connection refused
当我在远程shell上尝试这个命令时:
curl -i -X GET http://localhost:9999
…我从服务器得到一个响应。
为什么连接被拒绝?
尽pipe使用了身份validation方法,但SSH隧道工作方式也是一样的。 这里的问题不是使用公钥authentication,而是了解如何使用SSH隧道的基础知识。
您的-L 9990:example.com:9999
连接到远程端的公共networking接口,而在curl
testing中连接到localhost:9999
。 您提到的防火墙需要避免的可能是远程端,防止您首先使用http://example.com:9999/
。
您应该使用-L 9990:localhost:9999
而不是使用本地环回。
这张graphics象化你的情况。 -L [ bind_address:]port:host:hostport
…
…通过分配一个套接字来监听本地
port
,可选地绑定到指定的bind_address
。 无论何时连接到此端口,都会通过安全通道转发连接,并从远程计算机连接到host
端口hostport
。