(ssh隧道?)通过具有公共IP的* DIFFERENT *服务器使用私有IP访问远程服务器

我们假设以下主机:

  • localhost :我的笔记本电脑
  • remoteserver :运行SSH服务器的公有IP的服务器。
  • private.remoteserver :具有专用IP的服务器,只能从远程服务器访问。

我没有sudo访问远程服务器的权限,所以我无法对root用户进行更改。

问题是 :是否可以通过一个命令从远程服务器访问private.remoteserver上的端口?

我已经玩了一些ssh隧道,没有运气。 如本文所述,它想创build一个到private.remoteserver的SSH别名。

例如,我想从本地主机运行:

 curl http://private.remoteserver:8080/ 

连接到private.remoteserver上的端口8080。 这可能吗?

到目前为止,你还没有向我们展示你所尝试过的东西,但是这样简单的事情应该可以发挥作用:

 ssh -L 8080:private.remoteserver:8080 remoteserver 

然后,让你运行:

 curl http://localhost:8080/ 

…由于我们刚设置的端口转发,实际上会连接到private.remoteserver上的端口8080

如果您希望能够直接从您的客户端访问http://private.remoteserver:8080/ ,则需要(a)设置某种代理服务器,(b)configurationcurl(或其他软件)代理。 你可以用-D选项设置一个带有sshSOCKS5代理:

 ssh -D 1080 remoteserver 

然后你可以:

 curl --socks5-hostname http://private.remoteserver:8080/ 

大多数网页浏览器(Firefox,Chrome)也可以configuration为使用SOCKS5代理。 如果你search“sshdynamic转发”,你会发现很多很好的文档,包括Ubuntu的这篇文章 。

其实我用sshuttle解决了我的问题:

 sshuttle --dns -HN -r user@remoteserver 

没有其他代理configuration需要,那么我可以访问私有IP的任何端口:

 curl http://private:8080/