Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Emacs中,如何使用Tramp SSH作为不同的组ID进行编辑?_Emacs_Ssh_Su_Tramp - Fatal编程技术网

在Emacs中,如何使用Tramp SSH作为不同的组ID进行编辑?

在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/

我想我正在寻找的可能是一个类似于SSH和su的多跳的解决方案;但是我必须使用
sg
,而不是
su
。用例是,我在服务器上有一个用户,出于管理原因,该用户属于多个组(主组ID
group\u a
,第二组ID
group\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
as
myuser
,然后使用
sg
将主组从
groupa
切换到
groupb
。我建议您也
M-x report emacs bug
将其作为一种新的标准方法来提出?可以。我还将答案修改为使用
eval after load
,因为Tramp是自动加载的,所以在第一次使用之前,Tramp方法是未定义的。请编写报告。我很乐意将此功能添加到下一个Tramp版本中。