我认为我正在寻找的解决方案类似于使用SSH和su
的多跳;但我必须使用su
而不是sg
。用例是我在服务器上有用户,并且出于管理原因,用户属于多个组(主组ID group_A
,第二组ID group_B
)。使用SELinux访问控制,即使我拥有一个目录,但如果我的主组ID不正确,我将无法创建文件。在交互式会话中,我会chgrp group_B
切换我的主要组,并将创建一个新的shell会话。如果远程启动程序,我会ssh foo.com 'sg group_B /path/to/executable'
。如何在Emacs / Tramp中实现这些效果?
答案 0 :(得分:2)
我意识到ssh
,su
等在tramp-methods
中定义,可以按如下方式自定义,以添加另一个名为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
使用remotehost
将多跳连接到myuser
ssh
,然后使用group_A
将主要群组从group_B
切换为sg