如何使用Emacs Tramp双跳ssh?

时间:2009-04-03 21:49:00

标签: emacs ssh tramp

我的校园只允许通过网关服务器进行ssh访问。因此,为了访问我正在编码的集群,我必须ssh到网关,然后ssh到我正在处理的机器上。这种联系有时非常缓慢,令人沮丧。

我很想使用像tramp这样的东西,我知道它会在我的本地机器上打开缓冲区,并且当我保存到磁盘时只能通过网络进行通信。 我对tramp一点都不熟悉,并努力让它工作,特别是通过双跳。文档说这是通过在tramp中定义代理来完成的,但是我无法理解语法。

有没有人知道如何使用emacs通过双跃点进行编码,或者有一个替代的解决方法来通过两个ssh hops编辑代码?

4 个答案:

答案 0 :(得分:22)

至少从Emacs 24开始他们有一个新版本的multi你可以打开这样的路径:

   /ssh:bird@bastion|ssh:you@remotehost:/path

我可以确认这适用于我的Emacs 24.3.1版本。文档描述了它here

答案 1 :(得分:20)

如果您使用的是Emacs 24.3或更高版本,请参阅Joe's answer以获取下述配置的替代方法。如果您将多次使用此双跃点,则可能值得修改tramp-default-proxies-alist,如下所述,或将tramp-save-ad-hoc-proxies设置为t


如果您使用的是Emacs 23.1或更高版本,则不再支持multi方法。您可以通过配置“代理”来实现相同的结果。

.emacs配置文件中添加以下内容:

(add-to-list 'tramp-default-proxies-alist
                 '("HOSTB" nil "/ssh:USERA@HOSTA:"))

HOSTB是HOSTA背后的目的地主机。

然后输入/ssh:USERB@HOSTB:,emacs将提示输入HOSTA密码,然后输入HOSTB密码。

答案 2 :(得分:11)

你应该使用ssh来做双跳。在.ssh / config中:

Host <host that must be proxied too>
ProxyCommand ssh -qxT <gateway host> nc %h %p

答案 3 :(得分:4)

在早期的Emacs版本中,Tramp有一个multi方法。在GNU Emacs 22及更低版本中,您可以像这样使用它:

/multi:ssh:user1@host1:ssh:user2@host2:/foo/bar/baz

/foo/bar/baz上打开host2。 XEmacs也可以做同样的事情,但语法有所不同。您也可以使用不同的访问方法。