使用Emacs通过SSH和Sudo打开文件
我想在远程服务器上的Emacs中打开一个文件,服务器上有sudo电源。我可以通过Tramp使用sudo打开本地文件,如下所示:使用Emacs通过SSH和Sudo打开文件,emacs,ssh,sudo,tramp,Emacs,Ssh,Sudo,Tramp,我想在远程服务器上的Emacs中打开一个文件,服务器上有sudo电源。我可以通过Tramp使用sudo打开本地文件,如下所示: C-x C-f /sudo::/home/user/file 但我想在服务器上使用sudo: C-x C-f /sudo::user@server/home/user/file 但这给了我本地机器上的sudo权限,它要求我在本地机器上输入sudo密码。有没有办法在服务器上使用sudo 顺便说一句:服务器上没有安装Emacs您必须先通过ssh连接到服务器,然后才能在本
C-x C-f /sudo::/home/user/file
但我想在服务器上使用sudo:
C-x C-f /sudo::user@server/home/user/file
但这给了我本地机器上的sudo权限,它要求我在本地机器上输入sudo密码。有没有办法在服务器上使用sudo
顺便说一句:服务器上没有安装Emacs您必须先通过ssh连接到服务器,然后才能在本地运行Emacs
或者您可以使用无根挤压的NFS,或者您可以尝试使用emacs服务器/客户端,尽管我不知道会发生什么(我自己不要使用emacs)更新:虽然这个答案解决了最初的问题,但它是为emacs 20或21编写的。对于emacs 24,我建议您使用它,因为它提供了更多的解释,并且是最新的
我想你要找的是流浪汉 第一跳是ssh,第二跳是sudo
更新:最新版本的emacs支持使用代理进行多跳:
(add-to-list 'tramp-default-proxies-alist ("my-sudo-alias" nil "/ssh:user@ssh-host"))
然后通过打开调用:
/sudo:my-sudo-alias:file-on-ssh-host
我对选定的答案有一些疑问。但是,当我将这一行添加到.emacs时,它起了作用:
(add-to-list 'tramp-default-proxies-alist '(".*" "\\`root\\'" "/ssh:%h:"))
然后执行以下操作:
/sudo:ssh主机:ssh主机上的文件
这有点让人困惑,因为有一次我被提示输入“root”密码,但输入我用户的密码就允许我访问。它还普遍适用于网络上的所有主机。此外,我仍然可以这样做,而不是成为root用户:
/ssh:ssh host:ssh主机上的文件
那么任何
C-x C-f /sudo:remote-host:/file
在使用运行emacs但在远程计算机上的用户的相同用户名登录后,将使用sudo打开文件 从Emacs 24.3开始,在现代tramp默认代理列表
方法的基础上,对旧的multi:
语法进行了模拟,这意味着您可以再次执行多跳,而无需任何事先配置。有关详细信息,请参阅:
C-hig(不定期)特别多跳
使用新语法,每个“跃点”由|
分隔。本手册中的示例如下:
C-xC-f/ssh:bird@bastion|宋承宪:you@remotehost:/path
RET
首先以bird@bastion
,然后从那里到you@remotehost:/path
/远程主机上的su:or/sudo:
您还可以使用此语法将sudo/su转换为远程主机上的root用户(当然也可以是任何其他用户):
C-xC-f/ssh:you@remotehost|sudo:remotehost:/path/to/file
RET
重要信息:请确保明确指定主机名:sudo:remotehost:
,而不是sudo::
(请参见下文)
由于这仍然使用下面的代理机制,tramp默认代理列表
现在应该包含值(“remotehost”“root”“/ssh:you@remotehost:”
这意味着代理/ssh:you@remotehost:
将在您以root@remotehost
root
是这些方法的默认用户,但您当然也可以通过以下方式更改为非root用户:
C-xC-f/ssh:you@remotehost|苏多:them@remotehost:/path/to/file
RET
始终明确指定远程主机名
您可能习惯于使用sudo::
或su::
并省略主机名。如果您停留在本地主机上,这仍然可以,但是如果您要跳到远程服务器,则必须为每个跃点指定主机名——即使它与前一个跃点的主机名相同。始终对远程主机使用sudo:hostname:
或su:hostname:
这里的陷阱是,sudo::
看起来确实有效——但是,当您这样做时,动态代理条目的主机将是源于您的主机名,而不是连接到的主机。这不仅看起来令人困惑(因为文件路径中会显示错误的主机),而且还意味着任何后续尝试在本地主机上使用sudo::
的行为都会被代理到远程服务器!(如果您在第二台服务器上执行相同的操作,那么代理可能也会被破坏,从而导致进一步的问题)
简而言之,多跳时不要使用:
Emacs 27+
从Emacs 27.1(或Tramp 2.4.2,如果使用GNU ELPA包)开始,:
案例直观地工作,例如/ssh:you@remotehost|sudo::
将重新使用remotehost
而不是您自己的本地主机,这样您就不会得到错误的代理条目
此外,类似于/ssh:you@remotehost|sudo:localhost:
被检测并标记为用户错误
如果您可能会混合使用Emacs版本,包括早于27的版本(或者您建议其他可能正在使用较旧版本的人),那么在多次跳转时继续将:
视为不安全,以避免潜在的事故,这是最安全的。(即,如果不知道Tramp版本,则明确指定正确的远程主机仍然是最安全的方法。)您不能直接在服务器上以root用户身份进行命令吗?我有一个具有sudo权限的用户,但没有root密码。我尝试过,但在以普通用户身份装载文件时,无法以root用户身份使用sshfs访问文件。我想这是一个设置问题。正如哈桑所说,不应该小心使用任何根南瓜。-1因为没有回答这个问题-1用于建议使用NFS而不是SSH-1表示不建议使用根南瓜-1用于建议Emacs客户端(通常使用Unix域套接字)解决远程通信问题-这似乎是解决方案,但我得到了:“不再支持多种方法”你能给我指一本更新的手册吗?M-x信息,C-s tramp:)你可能需要定义一个假的主机作为你的sudo的目标,并将其添加到tramp默认代理列表中。我不能
C-x C-f /sudo:remote-host:/file