git daemon over 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 gitproxy@192.168.201.84
gitproxy@192.168.201.84:~$

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

$ ssh gitproxy@192.168.201.84  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

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

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, так как он будет управлять частью авторизации для вас.

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

git clone ssh: //<сервер>: 2222 / home / gitproxy / git

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

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

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

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

Для работы с git-репо через ssh вам нужен ssh-сервер. Так что, похоже, у вас есть один: на gitproxy@192.168.201.84; хорошо, тогда URL к репо ssh://gitproxy@192.168.201.84/home/gitproxy/git, Другой "scp-подобный" синтаксис для того же URL gitproxy@192.168.201.84:git,

Другие вопросы по тегам