从 Emacs 24.3 开始,旧multi:
语法的类似物被置于现代方法之上tramp-default-proxies-alist
,这意味着您可以再次执行多跳而无需任何事先配置。有关详细信息,请参阅:
C-hig (tramp)Ad-hoc multi-hops
RET
使用新语法,每个“跃点”由|
. 手册中的示例是:
C-xC-f /ssh:bird@bastion|ssh:you@remotehost:/path
RET
首先连接为bird@bastion
,然后从那里连接到you@remotehost:/path
/su: 或 /sudo: 在远程主机上
您还可以使用此语法 sudo/su 到远程主机上的 root(当然也可以是任何其他用户):
C-xC-f /ssh:you@remotehost|sudo:remotehost:/path/to/file
RET
重要:一定要明确指定主机名:sudo:remotehost:
而不是sudo::
(见下文)。
由于这仍然使用下面的代理机制,tramp-default-proxies-alist
现在应该包含值("remotehost" "root" "/ssh:you@remotehost:")
这意味着/ssh:you@remotehost:
每当您将文件请求为root@remotehost
.
root
是这些方法的默认用户,但您当然也可以更改为非 root 用户:
C-xC-f /ssh:you@remotehost|sudo:them@remotehost:/path/to/file
RET
始终明确指定远程主机名
您可能习惯于使用sudo::
或su::
省略主机名。如果您停留在本地主机上,那么这仍然可以,但是如果您要跳转到远程服务器,则必须为每个跃点指定主机名——即使它与前一跃点相同。始终使用sudo:hostname:
或su:hostname:
与远程主机一起使用。
这里的陷阱实际上sudo::
似乎有效 -但是当您这样做时,动态代理条目的主机将是您源自的主机名,而不是您连接到的主机。这不仅看起来令人困惑(因为错误的主机将显示在文件路径中),而且还意味着任何后续sudo::
在您的本地主机上使用的尝试都将被代理到远程服务器!(如果你在第二台服务器上做同样的事情,代理也可能会被破坏,从而导致进一步的问题)。
总之,::
多跳时不要使用!
27+
从 Emacs 27.1(或 Tramp 2.4.2,如果使用 GNU ELPA 包)开始,该::
案例可以直观地工作,这样/ssh:you@remotehost|sudo::
可以重用remotehost
而不是您自己的本地主机,因此您不会得到一个错误的代理条目。
此外,还会/ssh:you@remotehost|sudo:localhost:
检测到诸如此类的错误并将其标记为用户错误。
::
如果您可能会混合使用 Emacs 版本,包括早于 27 的版本(或者您正在建议可能使用旧版本的其他人),那么在多跳时继续将其视为不安全是最安全的,以避免潜在的事故。(即,如果 Tramp 版本未知,则明确指定正确的远程主机仍将是最安全的方法。)