如何为SSH隧道分配主机名


16

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是否可能?我已经阅读了手册页并在Google周围搜索了两天,但是它似乎无法正常工作。

--edit 2012-06-01 23:36--由于提供了答案和注释,端口转发现在可以使用

ssh user@remote.server -D 4321

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

Answers:


12

您所描述的是不可能的。但是仍然有个好消息:

但是,可以建立与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 Side注意:永远不要永远不要在root用户可以建立SSH的服务器上安装服务器!严重的安全漏洞。创建一个普通用户帐户(允许su或sudo)并以该用户SSH身份登录。


2
当您应该使用-D 1234(动态端口转发)时,您正在使用-L 1234(本地端口转发)。也许还避免使用-g,-g表示远程主机可以连接到您的转发主机,而这是您从工作站执行此操作所不想要的。
Mattias Ahnberg '01年

谢谢,克里斯。我已经尝试过了。我不能仅通过指定的端口使用ssh命令。它返回错误:“错误的本地转发规范'1234'”
brains_at_work 2012年

@ matthias-ahnberg:太好了。通过动态转发,我现在可以将端口用作代理,并将localhost:someport调用定向到远程服务器。
brains_at_work 2012年

@MattiasAhnberg哇,真是疯了。谢谢你的纠正。
克里斯·S

我按照此过程进行操作,但在Firefox中收到“连接已重置”错误。
rivu 2014年

23

您可以使用以下事实来分配名称:您的回送适配器将基本响应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

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

127.1.2.3 my.tunnel.name

然后,您应该能够从本地计算机连接到my.tunnel.name:4321。

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

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


我不得不将ip添加到osx的环回中。ifconfig l0 alias 127.0.1.1 255.255.255.0否则很棒的提示!
devians 2012年

1
如果您不想创建外壳-N,请在命令末尾运行。这样,更容易记住它是一个隧道,而不仅仅是任何SSH连接。
mlissner,2015年

使用时,127.1.2.3我必须在macbook:上执行此操作ifconfig lo0 alias 127.1.2.3 255.255.255.0,该操作会127.1.2.3在interface上添加为新地址lo0
Donn Lee

5

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

ssh user@host.domain.com -D 127.0.0.1:31337

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

如果要绑定一个主机名,只需添加/etc/hosts指向127.0.0.1的条目,但是更漂亮的方法可能是为第一个隧道添加127.0.0.2,为该隧道添加一个主机条目,为第二个隧道添加127.0.0.3。隧道和用于此的单独主机条目,等等。如果添加127.0.0.1的别名,有时此别名将出现在localhost的其他命令查找中,这可能会造成混淆!

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

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


感谢您的附加提示。由于我也使用Chrome,因此我也不必保持FireFox处于打开状态。
brains_at_work 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.