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

Dav*_*vid 8 remote-access linux ssh remote ssh-tunnel

让我们假设以下主机:

  • 本地主机:我的笔记本电脑
  • remoteserver:具有公共 IP 的服务器,它运行 SSH 服务器。
  • private.remoteserver:具有私有 IP 的服务器,只能从remoteserver访问。

我无权sudo访问remoteserver,因此我无法使用 root 用户进行更改。

问题是:是否可以通过单个命令从remoteserver访问private.remoteserver上的端口?

我在没有运气的情况下玩过 ssh 隧道。它想为private.remoteserver创建一个 SSH 别名,如本文所述

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

curl http://private.remoteserver:8080/
Run Code Online (Sandbox Code Playgroud)

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

lar*_*sks 8

到目前为止,您还没有向我们展示您尝试过的内容,但是像这样简单的事情应该可以工作:

ssh -L 8080:private.remoteserver:8080 remoteserver
Run Code Online (Sandbox Code Playgroud)

然后让你运行:

curl http://localhost:8080/
Run Code Online (Sandbox Code Playgroud)

......这是由于我们刚刚成立实际上连接到端口的端口转发8080private.remoteserver

如果您希望能够直接http://private.remoteserver:8080/从您的客户端访问,您需要 (a) 设置某种代理和 (b) 配置 curl(或其他软件)以使用代理。您可以使用以下选项设置SOCKS5代理:ssh-D

ssh -D 1080 remoteserver
Run Code Online (Sandbox Code Playgroud)

然后你可以:

curl --socks5-hostname http://private.remoteserver:8080/
Run Code Online (Sandbox Code Playgroud)

大多数网络浏览器(Firefox、Chrome)也可以配置为使用SOCKS5代理进行操作。如果您搜索“ssh 动态转发”,您会发现很多好的文档,包括这篇来自 Ubuntu 的文章