Проверка подлинности Git — извлечение от имени нового пользователя

#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 и желаемый закрытый / открытый ключ.