在Emacs中,如何使用Tramp SSH作为不同的组ID进行编辑?
我想我正在寻找的可能是一个类似于SSH和su的多跳的解决方案;但是我必须使用在Emacs中,如何使用Tramp SSH作为不同的组ID进行编辑?,emacs,ssh,su,tramp,Emacs,Ssh,Su,Tramp,我想我正在寻找的可能是一个类似于SSH和su的多跳的解决方案;但是我必须使用sg,而不是su。用例是,我在服务器上有一个用户,出于管理原因,该用户属于多个组(主组IDgroup\u a,第二组IDgroup\u B)。使用SELinux访问控制,因此即使目录归我所有,但如果我的主组ID不正确,我将无法创建文件。在交互式会话中,我将执行chgrp group_B切换我的主组,并将创建一个新的shell会话。如果远程启动一个程序,我会执行ssh foo.com'sg group_B/path/to/
sg
,而不是su
。用例是,我在服务器上有一个用户,出于管理原因,该用户属于多个组(主组IDgroup\u a
,第二组IDgroup\u B
)。使用SELinux访问控制,因此即使目录归我所有,但如果我的主组ID不正确,我将无法创建文件。在交互式会话中,我将执行chgrp group_B
切换我的主组,并将创建一个新的shell会话。如果远程启动一个程序,我会执行ssh foo.com'sg group_B/path/to/executable'
。如何在Emacs/Tramp中实现这些效果?我意识到ssh
,su
等在Tramp方法中定义,可以按如下方式自定义,以添加另一个名为sg
的连接方法:
(eval-after-load 'tramp
'(add-to-list
'tramp-methods
'("sg"
(tramp-login-program "sg")
(tramp-login-args (("-") ("%u")))
(tramp-remote-shell "/bin/sh")
(tramp-remote-shell-args ("-c")))))
那就可以了
C-x C-f /ssh:myuser@remotehost|sg:group_B@remotehost:/path/to/file
使用ssh
通过多跳连接到remotehost
asmyuser
,然后使用sg
将主组从groupa
切换到groupb
。我建议您也M-x report emacs bug
将其作为一种新的标准方法来提出?可以。我还将答案修改为使用eval after load
,因为Tramp是自动加载的,所以在第一次使用之前,Tramp方法是未定义的。请编写报告。我很乐意将此功能添加到下一个Tramp版本中。