如何SSH密钥的隧道

远程服务器上的端口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接口,而在curltesting中连接到localhost:9999 。 您提到的防火墙需要避免的可能是远程端,防止您首先使用http://example.com:9999/

您应该使用-L 9990:localhost:9999而不是使用本地环回。

<code> example.com </ code>和<code> localhost </ code>在远端的区别。

这张graphics象化你的情况。 -L [ bind_address:]port:host:hostport

…通过分配一个套接字来监听本地port ,可选地绑定到指定的bind_address 。 无论何时连接到此端口,都会通过安全通道转发连接,并从远程计算机连接到host端口hostport