git daemon через ssh - фатальная ошибка: ошибка протокола: неправильный символ длины строки: SSH-

Я создал пользователя «gitproxy» на стороне сервера, добавил свой ключ ssh к его авторизованным ключам и пытаюсь работать с демоном git через ssh:

gitproxy:~$ git daemon --port=2222 --verbose

но есть ошибка: На стороне клиента:

o:~/git$ git clone ssh://server>:2222/home/gitproxy/git
Cloning into 'git'...
ssh: connect to host <server> port 2222: Connection refused
fatal: Could not read from remote repository.

На стороне сервера:

[18666] Ready to rumble
[18667] Connection from 192.168.211.174:42416
fatal: protocol error: bad line length character: SSH-
[18666] [18667] Disconnected (with error)

Репо есть. Также я обычно захожу на этот сервер через SSH без пароля (значит, мой ключ ssh принимается):

$ ssh [email protected]
[email protected]:~$

Кроме того, я могу получить список веток с помощью git-receive-pack со своего рабочего стола (на стороне клиента):

$ ssh [email protected]  git-receive-pack  /home/gitproxy/git
008fef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/heads/masterreport-status delete-refs side-band-64k quiet atomic ofs-delta agent=git/2.16.1
0046ef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/remotes/origin/HEAD
0048ef8bbf80818e6b634ca56c3ef6c24e5bbdb7bf74 refs/remotes/origin/master

Я проверил все возможные исправления, которые предлагаются на stackoverflow. Но демон git все еще возвращает ошибку. Буду очень благодарен за любую помощь. Заранее спасибо!


person Alexander    schedule 27.01.2018    source источник


Ответы (3)


Но мне нужно --access-hook из git daemon (или любой другой механизм для выполнения некоторых действий, когда я запускаю "git pull" на стороне клиента).

Затем, используя только SSH (вообще без демона git), вы можете использовать механизм принудительной команды SSH, который я иллюстрирую, например, с помощью gitolite< /а>.

В ~gitproxy/.ssh/authorized_keys вы можете вызвать любой скрипт, который вы хотите выполнить, и затем вызвать сам Git, используя $SSH_ORIGINAL_COMMAND (который будет включать команду "git-upload-pack|git-receive-pack|git-upload-archive" Git").

Вы даже можете установить сам gitolite, так как он будет управлять авторизацией часть для вас.

person VonC    schedule 28.01.2018
comment
@Александр Отлично! Не забудьте прочитать stackoverflow.com/help/someone-answers. - person VonC; 29.01.2018

Демон git — это сервер, который реализует протокол git, то есть протокол, используемый с URL-адресами git://.... Он не понимает протокол SSH, поэтому, когда вы это сделаете:

git клонировать ssh://‹server›:2222/home/gitproxy/git

вы пытаетесь подключиться к <server>:2222 по протоколу SSH (из-за URL-адреса ssh://...). Затем git daemon не понимает, что SSH отправляет ему (SSH- в сообщении об ошибке является частью начального рукопожатия SSH).

Если вы действительно намеревались использовать протокол SSH для взаимодействия с удаленным репозиторием, нет необходимости использовать git daemon вообще. Используя форму URL-адреса ssh://..., команды git будут использовать SSH для вызова необходимых удаленных команд (например, receive-pack, которую вы выполнили вручную). В этом случае просто отбросьте спецификацию порта URL-адреса и закройте git daemon на сервере. Аутентификация и шифрование обеспечиваются SSH, работающим в качестве транспортного механизма, авторизация осуществляется с использованием разрешений файловой системы.

Если вы действительно хотите использовать git daemon и протокол git, вместо этого измените URL-адрес на git://<server>:2222/.... Обратите внимание, что протокол git не предоставляет никаких механизмов аутентификации, шифрования или авторизации, а открытые репозитории становятся полностью общедоступными.

person mmlr    schedule 27.01.2018
comment
Большое спасибо. Но мне нужно для -- access-hook демона git (или любого другого механизма для выполнения некоторых действий, когда я запускаю git pull на стороне клиента. - person Alexander; 28.01.2018

git-daemon не использует протокол SSH, он использует простой протокол git; URL-адреса протокола должны начинаться с git://, а не ssh://. т.е. URL вашего сервера git://192.168.201.84:2222/.

Для работы с репозиторием git через ssh вам нужен ssh-сервер. Так что, похоже, у вас есть: at [email protected]; хорошо, тогда URL репозитория ssh://[email protected]/home/gitproxy/git. Другой «scp-подобный» синтаксис для того же URL-адреса — [email protected]:git.

person phd    schedule 27.01.2018