Как мне использовать git-push --mirror с git-shell в SSH?

Я пытаюсь установить хук зеркала в резервную копию в наших репозиториях. Крюк выполняет git push --mirror backup@server:path/foo.git, Однако это не в состоянии заявить:

fatal: What do you think I am? A shell?
fatal: The remote end hung up unexpectedly

мой .ssh/authorized_keys В файле есть следующая запись:

command="/path/to/git-shell" ssh-rsa ....

# no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
# these are all set i just removed them for brevity.

Я пробовал разные комбинации, но документация по git-shell очень редкая. Я не уверен, в чем проблема, я надеюсь, что кто-то здесь может указать мне правильное направление. Что вызывает эту ошибку? У меня сложилось впечатление, что git-shell предназначен для использования с push / pull. Очевидно, я что-то упускаю, но понятия не имею, что это такое.

Путь на резервном сервере - к пустому репозиторию.

3 ответа

Я думаю, что проблема заключается в том, что вы создали команду в authorized_keys файл, но man sshdВ разделе о формате файла author_keys четко указано:

Команда = "команда"
Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если есть), игнорируется. (...)

Это означает, что всякий раз, когда git-upload-pack попытки связаться git-receive-pack (посредством ssh команда, включая вызов для git-receive-packбудет подавлено в пользу команды, указанной в .ssh/authorized_keys,
git-shell может и принимает входящие сообщения, связанные с git, но потому что git-upload-pack был раздавлен до нуля, первый предполагает, что кто-то пытается открыть обычный терминал, и отключает его. Это объясняется в man git-shell:

название
git-shell - Ограниченная оболочка для входа в систему только для доступа по Git.
конспект
git shell [-c]
описание
Оболочка входа для учетных записей SSH, обеспечивающая ограниченный доступ к Git. Когда задано -c, программа выполняется неинтерактивно; может быть одним из следующих: git receive-pack, git upload-pack, git upload-archive, cvs server или команда в COMMAND_DIR.(…)

Мой совет (если вы еще этого не сделали), чтобы создать отдельную учетную запись пользователя для git один и иметь эту учетную запись иметь соответствующие открытые ключи в <git-home>/.ssh/authorized_keys, Кроме того, не забудьте удалить принудительную команду из открытого ключа (ключей), о котором идет речь.
Кроме того, я рекомендую вам настроить gitучетная запись пользователя для использования git-shell так как это оболочка по умолчанию, изменив /etc/passwd вот так:

От "git:*:1000:1000: учетная запись системы git:/home/git:/bin/sh"
"Git: *: 1000: 1000: учетная запись системы git:/home/git:/usr/local/bin/git-shell"

Если git-shell установлен в другом месте, кроме /usr/local/bin, which git-shell скажу вам точный путь, чтобы следовать.

Надеюсь, поможет;-)

Возможно, посмотрите здесь:

http://joey.kitenet.net/blog/entry/locking_down_ssh_authorized_keys/

Эта страница предлагает

command="perl -e 'exec qw(git-shell -c), $ENV{SSH_ORIGINAL_COMMAND}'"

переслать SSH_ORIGINAL_COMMAND в git-shell, Это работает на моей стороне.

Обратите внимание на полный ответ, но вы можете взять некоторые подсказки из настройки gitolite mirror-shell, где gl-mirror-shell Сценарий на самом деле вызывает git shell,

Другие вопросы по тегам