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
,