Gitosis post-receive hook для развертывания репозитория с ошибками открытого ключа

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

Сначала я получил сообщение об ошибке cannot open /home/user/source/testing-local/.git/FETCH_HEAD: Permission denied, поэтому я изменил групповое владение папкой .git рабочего каталога на пользователя git.

После этого я получил ошибку Host key verification failed, которая заставила меня проверить, какой пользователь запускал ловушку, конечно же git (глупый я!), Поэтому я установил ключ в gitosis для пользователя git, под которым работает gitosis, и включил это в gitosis. конф. Теперь достаю старую Permission denied (publickey).

Мой хук post-receive выглядит так:

#!/bin/bash
while read oldrev newrev refname
do
  if [ "$refname" == "refs/heads/master" ]; then
    WORKDIR=/home/user/source/testing-local
    export GIT_DIR=$WORKDIR/.git
    pushd $WORKDIR >/dev/null
    id
    git pull --quiet >/dev/null
  fi
done

Вызов id предназначен только для проверки того, от имени какого пользователя я работаю.

Есть ли более простой способ добиться этого ?! Я пропустил что-то важное в своей настройке?


person ghickman    schedule 29.03.2011    source источник


Ответы (1)


Вам необходимо убедиться в значении переменной среды $HOME для пользователя git, выполняющего этот хук.

$HOME/.ssh - это место, где ssh будет искать закрытый ключ во время рукопожатия.
Также убедитесь, что каталог ssh на конце gitosis имеет необходимые разрешения.

server$ chmod go-w ~/
server$ chmod 700 ~/.ssh
server$ chmod 600 ~/.ssh/authorized_keys

Наконец, см. Раздел «Permission denied (publickey)» на GitHub, в котором повторяется то, что я упоминал выше. о HOME:

Обычно это происходит, когда ssh не может найти ваши ключи.
Убедитесь, что ваш ключ находится в местоположении по умолчанию, ~/.ssh.

person VonC    schedule 29.03.2011
comment
+1 Во второй строке опечатка, кстати - $HOME/ssh должно быть $HOME/.ssh - person Mark Longair; 29.03.2011
comment
@Mark: ... и исправлено. Спасибо :) - person VonC; 29.03.2011
comment
@VonC Я проверил все разрешения, как вы предлагали, и прошел через помощь github. На всякий случай я указал все необходимые параметры в файле .ssh / config. Если я возьмусь с авторизованными_ключами пользователя git, чтобы я мог войти в систему как он (а затем вернуть его в исходное состояние), я могу успешно выполнить извлечение в правильном каталоге, однако сценарий пост-получения по-прежнему получает разрешение отказано. Есть мысли о том, как я могу продолжить отладку? - person ghickman; 29.03.2011
comment
@ghickman: попытайтесь отобразить user и $HOME при запуске post-receive: отказано в разрешении означает, что / открытый ключ отсутствует в authorized_keys (или есть, но с опечаткой), или b / закрытый ключ отсутствует т доступны. То есть закрытый ключ для пользователя, фактически выполняющего ловушку post-receive. - person VonC; 29.03.2011
comment
@VonC Пользователь - git, а $ HOME - / home / git. Я проверил файл authorized_keys на всякий случай, но он обрабатывается конфигурацией gitosis-admin. Закрытый ключ имеет следующие разрешения: -rw ------- 1 git git - person ghickman; 29.03.2011
comment
@ghickman: никакого забавного дела в назывании этих ключей? Нет парольной фразы? попробуйте ssh -vvv hostname из ловушки, просто чтобы увидеть больше отладочной информации о сеансе ssh. - person VonC; 29.03.2011