如何使用特定的活动组将文件从远程复制到本地?

如何使用特定的活动组将文件从远程复制到本地?

这是一个关于 Linux 中一般复制的问题,而不仅仅是 Singularity 的问题。我正在尝试从远程目录递归复制到本地目录。在我的定义文件中,我有:

scp -r $USER@$HOST_MACHINE:/a/b/c ${SINGULARITY_ROOTFS}/a/b 

问题是我需要组abc才能/a/b/c访问$USER@$HOST_MACHINE.我有这个组,但不在远程计算机上的活动组中。我尝试了一些变化,sg但都失败了。例如:

sg abc scp -r $USER@$HOST_MACHINE:/a/b/c ${SINGULARITY_ROOTFS}/a/b 

失败是因为我abc只有在$HOST_MACHINE本地而不是在本地。我也尝试使用,ssh但我需要复制到本地目录而不是远程目录。

我正在查看 rsync 和 scp 的文档,但在复制之前找不到将组添加到远程计算机上的活动组中的方法。基本上我正在寻找一种方法:

scp -active_group abc -r $USER@$HOST_MACHINE:/a/b/c ${SINGULARITY_ROOTFS}/a/b 

如何使用特殊组将文件从远程复制到本地?

基本上我可以执行以下步骤:

  • SSH 远程计算机。
  • 清洗或使用sg命令。
  • 从远程复制到本地。
  • 退出远程机器。

但脚本应该是自动的,所以它会破坏它。我也猜想有一种方法可以做到这一点,但我只是想念它。

答案1

不保证您的本地 UID/GID 名称与远程 UID/GID 名称匹配。

但 UID/GID 值在机器间传输中很重要。唯一保证的 UID 值是 root - UID=0。

如果这是一次性副本,那么您将需要 root 访问权限才能在远程计算机上创建组。所以你可以——小心翼翼地- 以 root 身份运行脚本 - 只是为了创建一个新组。

您需要创建一个组,其 GID 在两台机器上都匹配[组名称是您的选择];据推测,两台计算机上应该具有相同的 UID 集 - [用户名由您选择]。

理想情况下,“为了简单起见”,两台计算机上的组名和用户名应相同。

/etc/group是一个分隔文件,列出 'groupname':'x':GID:user1,user2,...

/etc/passwd给出了众所周知的用户名、UID 的交叉引用

然而,这似乎是一个非常高风险的过程 - 即使您在试运行模式下运行它并仔细检查结果。

答案2

set GID bit如果可能的话,您可以在远程计算机上设置:

$chmod g+s abc -R /a/b/c 

(或从 - 开始/a,具体取决于您的需要)。这是一次性配置更改。

因此,在远程计算机上执行的任何操作都将abc设置为主要组,并且您scp将按原样正常工作。

相关内容