Gitolite: может подключаться через SSH, не может клонировать - PullRequest
5 голосов
/ 18 февраля 2012

Я установил gitolite на свой сервер, используя это руководство . Это подпадает под "некорневый" метод.

Не удается, когда я пытаюсь клонировать gitolite-admin обратно на мой клиент. Я получаю это сообщение об ошибке:

git clone gitolite@server.com:gitolite-admin
Cloning into gitolite-admin...
fatal: The remote end hung up unexpectedly

Также:

git clone ssh://gitolite@server.com:gitolite-admin
Cloning into gitolite0admin...
Using username "git-upload-pack 'gitolite".
fatal: The remote end hung up unexpectedly

Я также попытался добавить .git в конец имени репо, и я также попытался добавить repositories/gitolite-admin (предположительно из-за ошибок в уроке, связанном выше) и комбинацию того и другого, и ни одна из них не работает. Я не могу найти никаких результатов в Google по поводу бита «Использование имени пользователя», который меня заинтриговал.

Я могу подключиться к машине через ssh, и он говорит мне, что у меня есть доступ к R и W gitolite-admin. Итак, SSH работает?

Ответы [ 2 ]

7 голосов
/ 18 февраля 2012

Проверьте ssh части о gitolite : тот факт, что вы можете подключиться к server.com через ssh только означает:

  • ваш ключ ssh зарегистрирован в server.com@~/.ssh/authorized_keys
  • этот ключ не связан с gitolite 'нет опции "command=", что означает "независимо от того, что просит поступающий пользователь, принудительно запустите эту команду вместо этого").
    Вы находитесь в интерактивном сеансе и можете выполнить любую понравившуюся вам команду.

Что мне не нравится в стороннем учебнике, так это то, что он пытается использовать то же имя для пользователя git и пользователя без полномочий root

Вы должны хранить отдельно :

  • пользователь без полномочий root (, который не является учетной записью , просто ключ ssh, который будет связан с gitolite, с правами администратора для gitolite-admin репо)
  • учетная запись хостинга , которое должно быть 'git', а не gitolite, а именно во избежание путаницы между двумя режимами использования :
    • git ( войти непосредственно на server.com, здесь нет ssh ): для выполнения команды git требуется интерактивный сеанс (например, клонирование на сервере репозитория gitolite и выполнение gitolite/src/gl-system-install)
    • ssh git@server.comкоторый будет использовать ваш ~/.ssh/id_rsa(.pub) открытый и закрытый ключи, которые, будучи ключами гитолита, позволят вам клонировать репо gitolite-admin и отодвинуть это репо

Опять же:
'gitolite' не является истинной учетной записью , только имя, уполномоченное выполнять команды на server.com как 'git' (фактическая "учетная запись хостинга", как в" размещении git-сервисов и репозиториев ").
Все остальные пользователи git также будут выполнять команды git для server.com как git.
И этого конкретного пользователя (gitolite)будет связан со слоем авторизации gitolite через механизм принудительных команд , с настройками привилегий во время установки gitolite, чтобы предоставить этому пользователю права на клонирование, изменение и откат gitolite-admin repo .
(Это его единственное сравнениеd для всех остальных пользователей ssh ​​git, которые вы добавите: у них не будет доступа к этому конкретному репозиторию git, который является gitolite-admin one)

Попытка назвать двоих с одинаковым именем просто проситпроблема.

Мне не нравится использовать соглашение об именах по умолчанию для открытых / закрытых ключей, поэтому я предпочитаю, чтобы клиент определял эти ключи с именем предполагаемого пользователя:

~/.ssh/gitolite.pub
~/.ssh/gitolite

Затем я определяю файл конфигурации: ~/.ssh/config, содержащий в нем:

host gitolite
     user git
     hostname server.com
     identityfile ~/.ssh/gitolite

(обратите внимание, что пользователь здесь: всегда git)
Затем я могу клонировать мой gitolite-amin репо:

git clone gitolite:gitolite-admin
# modify locally
# git add -A ; git commit -m "my modifs"
git push origin master
1 голос
/ 10 мая 2013

Для потомков исправление состоит в том, чтобы убедиться, что для GIT_SSH не установлено TortoisePlink.exe. Git не может его использовать.

...