在 Emacs 中,如何使用 Tramp SSH 以不同的组 ID 进行编辑?
In Emacs, how do I use Tramp SSH to edit as a different group ID?
我想我正在寻找的可能是类似于使用 SSH 和 su
进行多跳的解决方案;但我必须使用 sg
而不是 su
。用例是我在服务器上有一个用户,出于管理原因,该用户属于多个组(主组 ID group_A
、第二组 ID group_B
)。使用 SELinux Access Control 所以即使一个目录是我所有的,但如果我的主要组 ID 不正确,我将无法创建文件。在交互式会话中,我会执行 chgrp group_B
切换我的主要组,然后将创建一个新的 shell 会话。如果远程启动程序,我会做 ssh foo.com 'sg group_B /path/to/executable'
。如何在 Emacs/Tramp 中实现这些效果?
我发现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
使用ssh
通过multi-hops连接到remotehost
作为myuser
,然后使用[将主组从group_A
切换到group_B
=15=].
我想我正在寻找的可能是类似于使用 SSH 和 su
进行多跳的解决方案;但我必须使用 sg
而不是 su
。用例是我在服务器上有一个用户,出于管理原因,该用户属于多个组(主组 ID group_A
、第二组 ID group_B
)。使用 SELinux Access Control 所以即使一个目录是我所有的,但如果我的主要组 ID 不正确,我将无法创建文件。在交互式会话中,我会执行 chgrp group_B
切换我的主要组,然后将创建一个新的 shell 会话。如果远程启动程序,我会做 ssh foo.com 'sg group_B /path/to/executable'
。如何在 Emacs/Tramp 中实现这些效果?
我发现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
使用ssh
通过multi-hops连接到remotehost
作为myuser
,然后使用[将主组从group_A
切换到group_B
=15=].