通过Emacs和Tramp访问远程主机的网关

3
我在尝试使用Emacs编辑远程文件,但是我遇到了一些问题。我在文档和之前的SO问题中寻找解决方法,但是仍无法实现想要的功能。
我正在不同的地点进行远程工作,并且我希望在Foo服务器上编辑文件。Foo服务器不能直接从互联网访问,但是Bar服务器可以,并且Foo服务器可以从Bar服务器接受连接。我可以通过连接Bar服务器来访问Foo服务器。
Tramp文档告诉我需要添加到Tramp代理列表才能实现这一点,它应该如下所示:
(add-to-list 'tramp-default-proxies-alist
    ("foo_host" "seanm" "/ssh:seanm@bar_host"))

然而,当我尝试这样做时,它不起作用,我收到了晦涩的错误消息。
  • 如何明确地引用Foo?没有DNS服务器知道如何从其主机名找到Foo,而且Foo的IP地址在10.0.0.0/8私有空间中。我不想通过该IP地址来引用Foo,因为这可能会与其他我可能访问的10.0.0.0/8网络中的主机发生冲突。作为一种解决方法,我将Foo添加到Bar的/etc/hosts文件中,但似乎并没有起作用。有更好的解决方案吗?

  • 我需要遵循什么引号规则?我看到的示例同时使用“双引号”和'tick-and-single'引号,后者显然需要双反斜杠转义。我不明白发生了什么 - 看起来这个字符串要经过多层解析。

  • 尝试这些变化时,我收到了“您不能为该场景使用该远程访问方法”的错误消息。如何设置第二个代理方法,以便我可以执行相当于C-x C-f /su::/path/to/file的操作?

与以前的多跳语法相比,这一切似乎都非常痛苦。

后来:我能够正确地转义多层以使emacs正确“听到”主机名。然而,我无法让超过第二个跳跃的任何跳跃正常工作,这是功能上非常令人失望的疏忽。


3
如果我没记错的话,有另一种方法就是通过配置ssh来使Foo通过Bar连接。使用OpenSSH,使用Host别名和ProxyCommand选项;您可以在Super UserUnixServer Fault上找到大量示例。 - Gilles 'SO- stop being evil'
这对于第一和第二个问题非常有帮助,但似乎无法帮助复制“/su::/path/to/file”的功能。 - Brighid McDonnell
1
原则上我应该能够用elisp完成整个事情。 - Brighid McDonnell
你为什么没有包含“晦涩难懂的错误信息”? - Ross Patterson
1个回答

1
正确的答案是通过在SSH配置中修改 Host、HostAlias 和 ProxyCommand 指令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接