如何为 SSH 隧道分配主机名

bra*_*ork 20 ssh tunneling port

我正在使用 ssh root@my.server.ip -g -L 4321:localhost:28017 在我的托管服务提供商处建立从 MacBook 到我的专用服务器的隧道。它运作良好。现在我想访问远程服务器上的几个管理站点(MongoDB 状态页面、RabbitMQ 页面等,都在不同的端口上)。所有这些都绑定到远程机器上的 127.0.0.1。我怎样才能调整这个 ssh 命令

  • 为隧道指定一个名称并在浏览器中使用例如“my.tunnel.name”
  • 能够在我的浏览器中定义远程端口;我想连接到 my.tunnel.name:port,以便能够调用不同的站点

这可以通过 ssh 实现吗?我已经阅读了手册页并搜索了两天,但它似乎不起作用。

--edit 2012-06-01 23:36-- 由于提供的答案和评论,端口转发现在使用

ssh user@remote.server -D 4321

我可以在浏览器中将其设置为代理,浏览器会将任何对 localhost:anyport 的请求视为是在远程服务器上发出的。现在不需要使用名称,因为浏览器仅用于远程服务器站点。

Zor*_*che 26

您可以使用环回适配器基本上响应 127.0.0.0/8 网络中的任何地址这一事实来分配名称。

因此,您可以绑定到 127.1.2.3:4321,而不是绑定到端口 4321。然后只需设置一个主机条目,将名称映射到您使用的环回地址,以便 foo.bar 映射到127.1.2.3.

在我的管理员工作站上的 SSH 配置中,我配置了许多隧道,以便它们绑定到环回范围内的某个地址,并且我的主机文件中有条目,因此我使用相同的端口并行打开许多隧道并通过以下方式区分它们姓名。

所以如果你这样连接

ssh root@my.server.ip -g -L 127.1.2.3:4321:localhost:28017
Run Code Online (Sandbox Code Playgroud)

你的主机文件有这样一行。

127.1.2.3 my.tunnel.name
Run Code Online (Sandbox Code Playgroud)

然后你应该能够从你的本地机器连接到 my.tunnel.name:4321。

如果您的 ssh 客户端连接到的网络上有额外的 IP 地址空间,您甚至可以为您的以太网接口分配一个辅助地址并使用您的真实 IP 之一,然后在您的 DNS 中设置条目,如果您希望其他系统能够使用您的 SSH 隧道。

-L 选项-L [bind_address:]port:host:hostport将允许您使用本地系统上的任何有效 IP 地址进行绑定。-g如果您希望其他主机能够通过您的 ssh 隧道连接,您也需要包含该选项。

  • 如果您不想创建 shell,请在命令末尾运行 `-N`。这样更容易记住它是一个隧道,而不仅仅是任何 SSH 连接。 (2认同)
  • 当使用`127.1.2.3`时,我必须在我的macbook上执行此操作:`ifconfig lo0 alias 127.1.2.3 255.255.255.0`,它将`127.1.2.3`添加为接口`lo0`上的新地址。 (2认同)

Chr*_*s S 14

你描述的情况是不可能的。但仍然有好消息:

然而,可能的是与 SSH 服务器建立动态连接。这将在您的本地计算机上打开一个端口,您可以将浏览器的代理设置指向该端口,并允许您将隧道用作代理服务器。但是您必须在浏览器中输入主机名/IP 和端口,就好像浏览器在 SSH 服务器所在的机器上运行一样。

命令如下所示:ssh user@server.example.com -D 1234
然后将浏览器的代理指向localhost:1234.

因此,如果您通过隧道进入服务器 A,并想连接到服务器 B,您可以在浏览器中输入在服务器 A 上运行的浏览器中输入的任何地址。如果在服务器 A 上运行的浏览器无法连接到服务器 B(如果服务器 B 上的进程只侦听 127.0.0.1)然后你仍然无法连接。听起来您只有一台服务器,但我想确保这很清楚。

如果您只有一台服务器,您可以使用动态连接隧道进入它,设置您的代理。然后,您将能够在浏览器中键入“localhost:1234”(例如),它将连接到端口 1234 上在远程服务器上运行的服务。

Securit 旁注:永远不要设置一个 root 可以通过 SSH 登录的服务器!严重的安全漏洞。创建一个普通用户帐户(允许 su 或 sudo)并以该用户身份通过​​ SSH 登录。

  • 当您应该使用 -D 1234(动态端口转发)时,您正在使用 -L 1234(本地端口转发)。并且也许还避免使用 -g,-g 意味着远程主机可以连接到您的转发,如果您从工作站执行此操作,这不是您想要的。 (2认同)

Mat*_*erg 6

使用您的 SSH 隧道创建一个动态应用程序级端口转发(基本上是 socks 代理),然后将您的应用程序指向这个端口。要创建动态隧道,请按如下方式连接:

ssh user@host.domain.com -D 127.0.0.1:31337
Run Code Online (Sandbox Code Playgroud)

然后配置您的应用程序以将其用作 SOCKSv5 代理。

如果你想要一个绑定到它的主机名,只需添加/etc/hosts指向 127.0.0.1 的条目,但更漂亮的方法可能是为第一个隧道添加 127.0.0.2,为这个隧道添加一个主机条目,为第二个隧道添加 127.0.0.3隧道和一个单独的主机条目,等等。如果你为 127.0.0.1 添加别名,有时这个别名会出现在 localhost 的其他命令查找中,这可能会令人困惑!

要在网络浏览器中顺利使用它,您可以使用代理插件,例如我喜欢 Chrome 网络浏览器,为此我使用了一个名为Proxy Switchy!. 你可以在这里下载:https :
//chrome.google.com/webstore/detail/caehdcpeofiiigpdhbabniblemipncjj

在这个插件的配置中,我可以定义几个单独的代理,然后绑定主机/URL 的正则表达式以使用某些代理,这样我将始终通过正确的隧道正确重定向,而无需手动切换。如果您需要进一步说明任何步骤,请告诉我!