
Это вопрос о копировании в 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
будет работать нормально.