需要通过本地端口 9990 上的 SSH 隧道访问远程服务器上的端口 9999,以避免防火墙。
我正在使用此命令来建立 SSH 隧道:
ssh -N -i share.pem -L 9990:`ecshare`:9999 ubuntu@`ecshare`
Run Code Online (Sandbox Code Playgroud)
其中 ecmy 包含 ec2 实例的 ip。作为基准,我可以使用以下命令 ssh 并获取远程 shell:
ssh -i share.pem ubuntu@`ecshare`
Run Code Online (Sandbox Code Playgroud)
但是,当我在本地提示上尝试此操作时:
curl -i -X GET http://localhost:9990
Run Code Online (Sandbox Code Playgroud)
我在隧道启动的外壳上得到了这个:
channel 2: open failed: connect failed: Connection refused
Run Code Online (Sandbox Code Playgroud)
当我在远程 shell 上尝试此命令时:
curl -i -X GET http://localhost:9999
Run Code Online (Sandbox Code Playgroud)
...我得到了服务器的响应。
为什么连接被拒绝?
Esa*_*nen 10
尽管使用了身份验证方法,但 SSH 隧道的工作方式相同。这里的问题不在于使用公钥身份验证,而在于了解如何使用 SSH 隧道的基础知识。
你-L 9990:example.com:9999
所连接到远程侧的公共网络接口,而您连接到localhost:9999
您的curl
测试。您提到的需要避免的防火墙可能位于远程端,首先阻止您使用http://example.com:9999/
。
您应该改用-L 9990:localhost:9999
使其使用本地环回。
此图形象化了您的情况。该-L [ bind_address:]port:host:hostport
...
...通过分配一个套接字来侦听
port
本地端的工作,可以选择绑定到指定的bind_address
. 每当与此端口建立连接时,该连接就会通过安全通道转发,并从远程机器建立到host
端口的连接。hostport
归档时间: |
|
查看次数: |
5219 次 |
最近记录: |