这是一个关于 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
将按原样正常工作。