
これは Singularity だけでなく、Linux 全般のコピーに関する質問です。リモート ディレクトリからローカル ディレクトリに再帰的にコピーしようとしています。定義ファイルには次の内容があります。
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 値は、UID=0 のルートです。
これが1回限りのコピーである場合、リモートマシンにグループを作成するにはルートアクセスが必要になります。そのため、次の操作を実行できます。細心の注意を払って- スクリプトを root として実行して、新しいグループを作成します。
両方のマシンで一致する GID を持つグループを作成する必要があります (グループ名は自由に選択できます)。おそらく、両方のマシンで同じ UID セットを持つ必要があります (ユーザー名は自由に選択できます)。
理想的には、グループ名とユーザー名は「簡潔にするため」、2 台のマシンで同じになります。
/etc/group
'groupname':'x':GID:user1,user2,... をリストした区切りファイルです。
/etc/passwd
ユーザー名、UIDのよく知られた相互参照を提供します
ただし、たとえこれをドライラン モードで実行し、結果を慎重にデスクチェックしたとしても、これは非常にリスクの高い手順であると思われます。
答え2
可能であれば、set GID bit
リモート マシンで を設定するだけです。
$chmod g+s abc -R /a/b/c
(または、/a
必要に応じて - から開始します)。これは 1 回限りの構成変更です。
したがって、リモート マシン上で実行されるものはすべてabc
プライマリ グループとして設定され、そのままscp
正常に動作します。