#git #git-pull
#git #git-извлечение
Вопрос:
Следующий набор команд работал правильно
$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin gitosis@myserver.net:repositories/carboncake.git
$ git pull
Но когда я попытался извлечь от имени другого пользователя,
$ mkdir carboncake
$ cd carboncake
$ git init
$ git remote add origin mithun@myserver.net:repositories/carboncake.git
$ git pull
Я получил следующую ошибку
fatal: 'repositories/carboncake.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly
мой gitosis.conf
содержит
[gitosis]
[group team]
writable = sweepshots
members = git_id_rsa
[group gitosis-admin]
writable = gitosis-admin
members = git_id_rsa
[repo carboncake]
description = A brand new app by Mithun.
owner = Mithun P
[group carboncake]
writable = carboncake
members = mithun @core
и keydir
содержит
git_id_rsa.pub KEY-----.pub mithun.pub mithun-rsa-key-20110427.pub
и .ssh
каталог пользователя содержит
mithun@testserver:~$ ls .ssh/
id_rsa id_rsa.pub mithun_rsa mithun_rsa.pub
— ОБНОВИТЬ
Я тоже пробовал $ git remote add origin mithun@myserver.net:carboncake.git
, но та же ошибка.
На самом деле carboncake.git находится по адресу /srv/gitosis/repositories/carboncake.git
Комментарии:
1. Это нормально: вы обходите gitosis, пробуя ssh с пользователем mithun, как объяснено в моем ответе. Вам нужно всегда использовать gitosis user, но пользователь будет обнаружен из-за его открытого ключа, извлеченного git в его
$HOME/.ssh/id_rsa.pub
.2. Это то, что требуется для клонирования / извлечения / отправки репозитория от имени другого пользователя с помощью gitosis: меняется ваш ДОМАШНИЙ адрес и изменяется открытый ключ, отправленный в gitosis. Но учетная запись, используемая для сеанса ssh, остается прежней.
Ответ №1:
Чтобы добавить немного ясности в английском языке к (полностью правильному) ответу @VonC…
gitosis (который больше не находится в активной разработке, и вы должны использовать gitolite, но этот ответ применим к ним обоим) хранит открытые ключи каждого пользователя в (в вашем случае) ~gitosis/.ssh/authorized_keys
. Когда пользователь подключается по ssh к учетной записи gitosis
, ssh выполняет криптографическое подтверждение связи, находит строку в этом файле authorized_keys, которая соответствует предоставленному ключу, и выполняет все, что сказано в этой строке. Если вы посмотрите на этот файл authorized_keys , в каждой строке содержится команда для вызова при входе этого пользователя в систему, которая является вызовом процесса gitosis, содержащего имя соответствующего пользователя.
Таким образом, каждый пользователь ДЕЙСТВИТЕЛЬНО подключается по ssh к ОДНОЙ и ТОЙ ЖЕ gitosis
«машинной» учетной записи, но ключ, с которым они используют SSH, запускает gitosis КАК пользователя, которым они являются. Вот как gitosis узнает, с каким пользователем он разговаривает, даже если они вошли в одну и ту же учетную запись «machine» с таким именем gitosis
.
Таким образом, каждому локальному репозиторию, который вы хотите отслеживать в gitosis, необходимо предоставить удаленный доступ в формате gitosis@your.server:<reponame>.git
.
Комментарии:
1. 1. Gitosis, подобные gitolite, основаны на ** механизме принудительной команды ssh (см. Ссылку) ** для того, чтобы: a / аутентифицировать удаленного пользователя с помощью открытого ключа, b / всегда вызывать скрипт gitosis с целью авторизации, отказывая пользователю в интерактивном сеансе ssh под именем «gitosis» и полностью защищая репозитории (особенно, если домашний каталог учетной записи gitosis находится в 700!).
Ответ №2:
mithun@myserver.net
?
Используя mithun@myserver.net
, вы полностью обходите gitosis, поскольку правильный URL будет включать пользователя ‘ git
‘, под которым был установлен gitolite.
В каждой команде gitosis будет задействован один и тот же пользователь ‘git’: gitosis@myserver.net
(предполагается, что здесь используется учетная запись ‘gitosis’).
Кроме того, вам не нужно указывать полный путь к репозиторию:
git remote add origin gitosis@myserver.net:carboncake.git
Комментарии:
1. разве невозможно выполнить проверку от имени другого пользователя? но почему в файле gitosis.conf есть группы и участники?
2. @Mithun: Это абсолютно возможно, вам просто нужно войти в систему как пользователь с открытым ssh-ключом $ HOME /.ssh / id_rsa.pub, специфичным для этого пользователя, с указанными открытыми ключами, опубликованными в репозитории gitosis. Затем Gitosis идентифицирует удаленного пользователя для запроса ssh как указанного другого пользователя. Но сам запрос ssh всегда выполняется от имени учетной записи ‘gitosis’. Если только вы не хотите полностью обойти gitosis.
ssh/authorized_keys
Файл со всеми открытыми ключами ваших пользователей содержит только учетная запись gitosis (и принудительную команду для вызова скрипта gitosis).3. @Mithun: смотрите gitosis README: eagain.net/gitweb /… : «На данный момент
gitosis
используетHOME
переменную среды, чтобы определить, куда записывать свои файлы. Если вы используетеsudo -u
without-H
,sudo
старое значениеHOME
останется на месте, и это вызовет проблемы. Позже для этого будет найден обходной путь, но пока всегда не забывайте использовать-H
, если вы выполняете sudoing с учетной записью.4. Обратите внимание, что вы можете указать другой открытый ключ в
$HOME/.ssh/config
, чтобы один пользователь мог подключаться с двумя разными идентификаторами.5. @Jan: но это предполагало бы определить
~/.ssh/config
файл, в котором вы бы назвали эти два сеанса ssh, каждый из которых явно ссылается на закрытый ключ черезIdentityFile
. Таким образом, вам не придется использовать какие-либо экзотические опции при использовании ssh:ssh mySshSession:mysever/...
соmySshSession
ссылкой на пользователя gitosis, сервер gitosis и желаемый закрытый / открытый ключ.