我的校园只允许通过网关服务器进行ssh访问。所以要访问我正在编码的集群,我必须先ssh到网关,然后再ssh到我正在使用的机器上。有时连接非常慢,很难工作。
我希望能使用像tramp这样的工具,据我了解,它会在本地打开缓冲区,并且只在保存到磁盘时才通过网络进行通信。
但是我对tramp并不熟悉,尤其是通过双跳方式。文档说可以通过在tramp中定义代理来实现,但我无法理解语法。
有人知道如何使用emacs通过双跳方式编码,或者有其他的解决办法来通过两个ssh跳跃进行代码编辑吗?
我的校园只允许通过网关服务器进行ssh访问。所以要访问我正在编码的集群,我必须先ssh到网关,然后再ssh到我正在使用的机器上。有时连接非常慢,很难工作。
我希望能使用像tramp这样的工具,据我了解,它会在本地打开缓冲区,并且只在保存到磁盘时才通过网络进行通信。
但是我对tramp并不熟悉,尤其是通过双跳方式。文档说可以通过在tramp中定义代理来实现,但我无法理解语法。
有人知道如何使用emacs通过双跳方式编码,或者有其他的解决办法来通过两个ssh跳跃进行代码编辑吗?
至少从Emacs 24开始,它们有一个新版本的multi,您可以像这样打开路径:
/ssh:bird@bastion|ssh:you@remotehost:/path
我可以确认在我的Emacs 24.3.1版本中这个方法是有效的。文档在这里有介绍。
su:
和 sudo:
方法时,还要注意使用此语法可能存在的陷阱:https://dev59.com/53I95IYBdhLWcg3wvgh9#16408592 - philstramp-default-proxies-alist
或将tramp-save-ad-hoc-proxies
设置为t
。
multi
方法。您可以通过配置“代理”来实现相同的结果。.emacs
配置文件中添加以下内容:(add-to-list 'tramp-default-proxies-alist
'("HOSTB" nil "/ssh:USERA@HOSTA:"))
HOSTB是HOSTA后面的目标主机。
然后输入/ssh:USERB@HOSTB:
,emacs会提示输入HOSTA密码和HOSTB密码。
你应该使用 SSH 进行双跳。在你的 .ssh/config 文件中:
Host <host that must be proxied too>
ProxyCommand ssh -qxT <gateway host> nc %h %p
multi
方法。在GNU Emacs 22及以下版本中,您可以像这样使用它:/multi:ssh:user1@host1:ssh:user2@host2:/foo/bar/baz
在host2
上打开/foo/bar/baz
。在XEmacs上也可以做到同样的事情,但语法略有不同。您也可以使用不同的访问方法。
完整的配置如下:
Host servera
Hostname servera.lan.local
User servera-user
ProxyCommand ssh gateway-server -W %h:%p
~/.ssh/id_rsa.pub
或~/.ssh/id_ed25519.pub
添加到servera
上的~/.ssh/known_keys
中。C-x C-f /ssh:servera:~/abc.txt
。