Как мне использовать 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
,