#git #ssh #gitlab
# #git #ssh #gitlab
Вопрос:
При попытке клонирования с использованием SSH URL мы получаем следующую ошибку:
$ git clone git@host:repository.git
Cloning into 'test'...
fatal: protocol error: bad line length character: This
Мы используем GitLab локально и используем SSH URL для клонирования репозиториев. Вчера все пользователи и Дженкинс сообщили о проблемах с клонированием, извлечением и отправкой кода в репозитории. Вскоре мы выяснили, что протокол HTTPS работает должным образом, и эта проблема была ограничена для всех, использующих SSH URL.
Вот некоторые вещи, которые мы пытались получить более подробно, но безрезультатно, за исключением того, что мы видим, что после авторизации происходит сбой со статусом выхода 254 или 1 случайным образом:
GIT_SSH_COMMAND='ssh -v' git clone git@host:repository.git
GIT_SSH_COMMAND='ssh -v' git clone git@host:repository.git
Фрагмент вывода из приведенных выше команд
debug1: Authentication succeeded (publickey).
Authenticated to host ([a.y.x.b]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: PTY allocation disabled.
debug1: Remote: Forced command.
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: PTY allocation disabled.
debug1: Sending environment.
debug1: Sending env GIT_PROTOCOL = version=2
debug1: Sending command: git-upload-pack 'repository.git'
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: client_input_channel_req: channel 0 rtype eow@openssh.com reply 0
debug1: channel 0: free: client-session, nchannels 1
fatal: protocol error: bad line length character: This
Transferred: sent 2352, received 2984 bytes, in 0.1 seconds
Bytes per second: sent 22560.7, received 28622.9
debug1: Exit status 1
Комментарии:
1. Попробуйте запустить
ssh git@host 'echo hello'
и посмотреть, печатает ли он что-нибудь, кроме «привет».2. В качестве шага отладки: запуск простого
ssh git@host
файла также может помочь выявить некоторые проблемы.
Ответ №1:
Проверьте, какие поддерживаемые оболочки
cat /etc/shells
В нашем случае у пользователя git была отключена оболочка, и на изображении ниже отображался /sbin/ nologin
остановлен экземпляр gitlab
gitlab-ctl stop
Обновить оболочку для пользователя git (вы можете использовать любую из приведенных ниже команд)
usermod -s which git-shell git
usermod -s /bin/sh git
Перенастроить GitLab
gitlab-ctl reconfigured
Перезапустите службу GitLab
gitlab-ctl restart
Наконец, проверьте, что /sbin/ nologin изменился на /bin/sh для пользователя git, как показано на рисунке ниже
vi /etc/passwd | grep git
Комментарии:
1.
/bin/sh
возможно, это не та оболочка, которую вы хотели бы использовать здесь. Смотрите git-scm.com/docs/git-shell2. Мы выполнили следующую команду, и мне сказали, «какой git-shell» сопоставляется с /bin/sh: usermod -s, который git-shell git
3. С вашей настройкой любой, у кого есть
git@host
доступ, теперь может запускать любую команду от имени пользователяgit
. Например,ssh git@host echo test
будет печататьtest
. Это может быть нормально, в зависимости от того, насколько вы доверяете своим пользователям. Вот почему я сказал, что этого не может быть . Это просто примечание.