Резервное копирование репозиториев gitosis с помощью rsync?

У меня есть стандартная установка gitosis, резервную копию которой я хотел бы сделать с помощью rsync. Когда я пытаюсь:

rsync -avz [email protected]:/home/git git_origin/

or

rsync -avz --rsync-path 'sudo rsync' 192.168.0.2:/home/git git_origin/

Он не справляется с файлами репозитория. Почти уверен, что это связано с тем, что пользователь «git» не имеет пароля и полностью владеет всеми файлами в его структуре каталогов /home/git/repositories. Поскольку вы не можете «ssh git» или «su git», я не могу добиться правильного уровня разрешений.

Итак, как мне использовать rsync для резервного копирования всех моих репозиториев gitosis?


person Karl    schedule 10.06.2010    source источник
comment
Никто? Похоже, это должно быть довольно распространенной функцией для тех, у кого есть собственный сервер gitosis.   -  person Karl    schedule 22.09.2010


Ответы (3)


Самый простой способ IMO - добавить пользовательский ключ в ваш файл authorized_keys для пользователя git.

Добавьте запись над строкой, которая говорит ### autogenerated by gitosis, DO NOT EDIT в качестве пользователя root под /home/git/.ssh/authorized_keys (в большинстве систем Linux), и все будет готово. Gitosis по умолчанию игнорирует пользовательские записи в файле authorized_keys при его регенерации.

Если вы хотите больше заблокировать сервер, вы всегда можете добавить пользовательскую директиву command= перед записью ключа, погуглив «rsync ssh lock down», вы получите http://sixohthree.com/1458/locking-down-rsync-using-ssh в качестве первого нажатия, с которого вы должны начать.

Единственный другой способ захвата файлов через rsync без прыжков через некоторые случайные переключения пользователей (как в переключателях user-> root-> git) — это использовать ssh для подключения в качестве пользователя root и получения файлов с ним.

Как запуск от имени пользователя root, так и использование ssh от имени пользователя git путем предоставления пользовательской записи authorized_keys должны предоставить вам разрешения, необходимые для доступа к файлам, которые вы хотите rsync.

person photoionized    schedule 21.04.2011
comment
Я считаю, что весь файл author_keys генерируется автоматически, поэтому это не сработает. - person Arrowmaster; 21.04.2011
comment
Обратите внимание на мой комментарий о том, что gitosis игнорирует пользовательские записи authorized_keys при перезаписи файла authorized_keys. Любая запись, добавленная вручную, будет сохранена, независимо от того, что находится в каталоге ключей. Раньше я переписывал gitosis так, чтобы он работал с другими репозиториями, использующими протоколы SSH, и я гарантирую, что именно так он работает и что все вышеперечисленное будет успешным. - person photoionized; 21.04.2011
comment
Если вы хотите изучить код, который определяет это поведение, посмотрите на filterAuthorizedKeys внутри ssh.py в исходниках gitosis. - person photoionized; 22.04.2011
comment
Хотя это могло сработать для гитоза, похоже, что он разрушает гитолит. Жаль, это был бы действительно простой способ настроить rsync. - person quickshiftin; 25.03.2015
comment
Хорошо... так что это действительно работает. Просто убедитесь, что это не один из тех же ключей, которые используются вашими учетными записями gitolite!! - person quickshiftin; 25.03.2015

gitolite перечисляет rsync как одну из поддерживаемых внешних команд, для которых он может предоставить авторизацию.

Я этого не делал, но я считаю, что вы можете настроить это с помощью определенного ssh-ключа, которому разрешено использовать rsync в каждом репозитории. Первый шаг — установка $RSYNC_BASE в файле gitolite.rc. example.conf показывает, как указать разрешения для rsync.

И, если вам интересно, почему я ответил о gitolite вместо gitosis, gitosis не поддерживается, устарел и мертв, прекратите использовать его и переключитесь на gitolite.

person Arrowmaster    schedule 21.04.2011

Я использовал этот скрипт для запуск для моих настраиваемых сценариев, и он использует

--rsync-path='sudo /usr/bin/rsync'

Может быть, это могло бы помочь?

person chris polzer    schedule 16.04.2011
comment
Хотя у вас есть доступ к репозиториям, у вас есть дополнительная работа, чтобы поддерживать какого-то резервного пользователя и циклически выполнять клонирование, обновление и т. д. репозиториев. На мой взгляд, rsync является более прямым подходом. - person quickshiftin; 25.03.2015
comment
ну да, через некоторое время я все еще использую rsync для резервного копирования сервера, так что да, идея с вытягиванием/выталкиванием была не самой лучшей, поэтому я отредактировал верхний пост и удалил ту часть с резервным копированием через git. Хотя я должен сказать, что мне было довольно весело с git-mirrors... - person chris polzer; 26.03.2015