如何使用密钥建立 SSH 隧道

如何使用密钥建立 SSH 隧道

需要通过本地端口 9990 的 SSH 隧道访问远程服务器上的端口 9999,以避开防火墙。

我正在使用此命令来建立 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

...我收到了服务器的响应。

为什么连接被拒绝?

答案1

无论使用何种身份验证方法,SSH 隧道的工作方式都是一样的。这里的问题不是使用公钥认证但了解基础知识如何使用 SSH 隧道

在测试中,您-L 9990:example.com:9999连接到的是远程端的公共网络接口。您提到的需要避开的防火墙可能位于远程端,阻止您使用。localhost:9999curlhttp://example.com:9999/

您应该使用-L 9990:localhost:9999来让它使用本地环回。

远程端 <code>example.com</code> 和 <code>localhost</code> 之间的区别。

-L [ bind_address:]port:host:hostport此图表直观地显示了您的情况。...

port...通过分配一个套接字在本地进行监听,可选择绑定到指定的bind_address。每当与此端口建立连接时,该连接都会通过安全通道转发,并连接到host端口hostport 从远程机器

相关内容