Ошибка Git: ошибка проверки ключа хоста при подключении к удаленному репозиторию

Я пытаюсь подключиться к удаленному репозиторию Git, который находится на моем веб-сервере, и клонировать его на свой компьютер.

Я использую следующий формат для своей команды:

git clone ssh://[email protected]/repository.git

Это отлично сработало для большинства членов моей команды. Обычно после запуска этой команды Git запрашивает пароль пользователя, а затем запускает клонирование. Однако при запуске на одной из моих машин я получаю следующую ошибку:

Ошибка проверки ключа хоста.

фатальный: не удалось прочитать из удаленного репозитория.

Мы не используем ключи SSH для подключения к этому репозиторию, поэтому я не уверен, почему Git проверяет их на этом конкретном компьютере.


person bootsz    schedule 13.11.2012    source источник
comment
Вы используете SSH для подключения к этому репозиторию, обратите внимание, как ваш URL начинается с ssh://   -  person Brandon    schedule 10.01.2019
comment
У меня есть аналогичная проблема. Кто-нибудь может мне помочь? Я застрял :(   -  person SepSol    schedule 10.03.2020


Ответы (23)


Вы подключаетесь по протоколу SSH, на что указывает префикс ssh:// в URL-адресе вашего клона. Используя SSH, у каждого хоста есть ключ. Клиенты запоминают ключ хоста, связанный с определенным адресом, и отказываются подключаться, если кажется, что ключ хоста изменился. Это предотвращает атаки человека посередине.

Ключ хоста для domain.com изменился. Если вам это не кажется подозрительным, удалите старый ключ из локального кеша, отредактировав ${HOME}/.ssh/known_hosts, чтобы удалить строку для domain.com, или разрешив утилите SSH сделать это за вас с помощью

ssh-keygen -R domain.com

Отсюда запишите обновленный ключ, сделав это самостоятельно с помощью

ssh-keyscan -t rsa domain.com >> ~/.ssh/known_hosts

или, что то же самое, пусть ssh сделает это за вас в следующий раз, когда вы подключитесь к git fetch, git pull или git push (или даже с обычным ol ’ssh domain.com), ответив" да "при появлении запроса.

The authenticity of host 'domain.com (a.b.c.d)' can't be established.
RSA key fingerprint is XX:XX:...:XX.
Are you sure you want to continue connecting (yes/no)?

Причина этого запроса заключается в том, что domain.com больше не находится в вашем known_hosts после его удаления и, предположительно, не входит в /etc/ssh/ssh_known_hosts системы, поэтому ssh не имеет возможности узнать, действительно ли хост на другом конце соединения является domain.com. (Если в /etc указан неправильный ключ, кому-то с правами администратора придется обновить общесистемный файл.)

Я настоятельно рекомендую вам также рассмотреть возможность аутентификации пользователей с помощью ключей. Таким образом ssh-agent может хранить ключевой материал для удобства (вместо того, чтобы каждый должен вводить свой пароль для каждого подключения к серверу), и пароли не передаются по сети.

person Greg Bacon    schedule 13.11.2012
comment
Интересный факт: запуск sudo ssh-keygen -R domain.com может переименовать ваш существующий known_hosts файл в known_hosts.old и создать копию , доступную для чтения только root. (-rw------- root root) Вы можете легко chown это вернуть соответствующему пользователю, но вы также можете потратить полдня на отладку, почему git не работает. : D - person Andrew Rueckert; 29.02.2020
comment
Are you sure you want to continue connecting (yes/no)?. Не делай той же ошибки, что и я. Вам нужно ввести yes. Простое нажатие Enter по умолчанию не означает, что да. - person JolonB; 25.05.2020
comment
В моем случае я просто не смонтировал существующий файл known_hosts в контейнер. В дополнение к установке моего SSH-ключа в контейнер я добавил -v ${HOME}/.ssh/known_hosts:/root/.ssh/known_hosts к моей команде docker run. - person Cameron Hudson; 19.08.2020
comment
Для сред CI, таких как Jenkins, вы не можете ответить «да» при появлении запроса. Итак, убедитесь, что: 1. ключи ssh созданы правильно и находятся в каталоге .ssh внутри вашего дома. 2. целевой домен добавлен в known_hosts, как указано здесь. - person Sebastian Juarez; 25.08.2020
comment
Одна из проблем заключается в том, что вам может понадобиться номер порта для удаленного репозитория: ssh-keyscan -p 8888 -t rsa domain.com >> ~/.ssh/known_hosts - person andrew; 16.04.2021
comment
@AndrewRueckert - одна из многих причин, по которым случайное добавление sudo в начало команд - плохая идея. - person jbg; 19.04.2021

Как я уже отвечал ранее в Клонирование репозитория git вызывает ошибку - ошибка проверки ключа хоста. фатальный: удаленный конец неожиданно повесил трубку, добавьте GitHub в список авторизованных хостов:

ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts

person Tupy    schedule 01.04.2015
comment
Это наиболее безопасный способ, если у вас уже есть ключ. Предполагается, что вы запускаете его только один раз, а не каждый раз, когда подключаетесь к серверу. - person Zenexer; 13.08.2015
comment
В частном репозитории моей компании используется ecdsa в качестве ключа, поэтому, если решение не работает, возможно, это связано с неправильным алгоритмом. - person Fendy; 12.04.2016
comment
Это должен быть принятый ответ. Спасибо, что спасли мне день. - person Keyur; 09.08.2017
comment
у меня тоже сработало, мне было интересно, почему я не могу клонировать собственное репо - person StackAttack; 16.11.2018
comment
Кто-то отметил это сообщение (неправильно). Из отзыва. - person Wai Ha Lee; 22.02.2019
comment
К вашему сведению, ваш пост был отмечен как низкокачественный, и флаг был отклонен. Из отзыва - person double-beep; 22.02.2019
comment
Если вы используете Windows, проще всего установить git-for-windows (загрузить) и открыть Git Bash. Внутри этой консоли вы можете использовать команду ssh-keyscan - person Rafael Araújo; 25.03.2019
comment
Ух ты! Сработало у меня! - person Codetard; 21.05.2020

У меня была аналогичная проблема, но с использованием ключей SSH. Из ответа Тупи, приведенного выше, я понял, что проблема в том, что файл known_hosts отсутствует или github.com отсутствует в списке известных хостов. Вот шаги, которые я выполнил, чтобы решить эту проблему -

  1. mkdir -p ~/.ssh
  2. ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
  3. ssh-keygen -t rsa -C "user.email"
  4. откройте открытый ключ с помощью этой команды $ cat ~/.ssh/id_rsa.pub и скопируйте его.
  5. Добавьте ключ id_rsa.pub в список ключей SSH в вашем профиле GitHub.
person Saran    schedule 28.04.2015
comment
@OJFord К вашему сведению: я отредактировал исходный ответ таким образом, что ваш комментарий устарел. ТБХ, и при всем уважении, это было не совсем правильно. Команда touch завершится ошибкой, если каталог ~/.ssh не существует, поэтому шаг 1 по-прежнему требовался. Также вам не нужно touch файл перед использованием >> перенаправления. Он будет создан при необходимости (но только файл, а не весь путь, поэтому по-прежнему требуется mkdir -p). Параметр -p заставляет его работать, если каталог уже существует. - person Tad Lispy; 10.06.2018
comment
Это # 2 ssh-keyscan, которого не хватает в документации Github при добавлении нового ключа ssh. - person Phil Andrews; 14.10.2019
comment
У меня были проблемы с моим Dockerfile отсутствием разрешения. Добавление 2-го шага решило эту проблему! Спасибо за отличную работу - person Spencer Pollock; 16.02.2020
comment
Я выполнил вышеуказанный шаг и потерпел неудачу, так как давал github.com в качестве hostKey в файлах свойств конфигурации сервера spring. Тем, кому не удается подключить spring.cloud.config-server для получения из git, см. Этот tranhoangminh.wordpress.com/2018/09/14/. Хорошо объяснено здесь. - person SHAKU; 20.03.2021

Это происходит потому, что github в настоящее время отсутствует на ваших известных хостах.

Вам будет предложено добавить github к вашим известным хостам. Если этого не произошло, вы можете запустить ssh -T [email protected], чтобы снова получить приглашение.

person Powderham    schedule 01.11.2017
comment
Это правильный ответ, если вас никогда не спрашивают. - person Matt Hagemann; 07.07.2018

Мне просто нужно было набрать «да» в ответ на вопрос: «Вы уверены, что хотите продолжить соединение (да / нет)?» вместо того, чтобы просто нажимать Enter.

person Code-Apprentice    schedule 02.08.2017
comment
Этот ответ заставил меня понять, что мне пришлось вручную клонировать свое репо на моем сервере сборки, чтобы набрать `` да '' и добавить мой битбакет-сервер в мои известные_хосты - person Sashah; 20.11.2017
comment
@Sashah Если все, что вам нужно, это сервер битбакетов в known_hosts, вы можете редактировать файл вручную. Нет необходимости клонировать репо, если это единственная причина для этого. - person Code-Apprentice; 13.12.2017

Если вы находитесь в служебной интрасети (в противном случае опасно), которая всегда защищена брандмауэрами, просто укажите следующие строки в вашем ~/.ssh/config.

Host *
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null
person sunil    schedule 04.03.2017
comment
Это все еще опасно, если у нас нет корпоративных брандмауэров. Как узнать, что вы разговариваете с настоящим гитхабом, не проверяя ключ сервера? - person Mnebuerquo; 17.03.2018
comment
В корпоративной среде в основном используются локальные репозитории git, а не репозитории с открытым исходным кодом. В худшем случае конфигурация .ssh в верхней части файла может содержать явные строки конфигурации github, связанные с хостом, для ssh для выбора более конкретных совпадений. - person sunil; 21.05.2018

У меня такая же проблема на недавно установленной системе, но это проблема udev. Не было узла /dev/tty, поэтому пришлось сделать:

mknod -m 666 /dev/tty c 5 0
person Geoffroy    schedule 06.08.2013
comment
У меня это сработало, потому что / dev / tty был создан как файл, что очень странно! (поэтому вам нужно удалить его, а затем воссоздать с помощью mknod) - person Doomsday; 02.11.2014
comment
@Geoffroy, я удалил / dev / tty, и теперь, когда делаю sudo, я сталкиваюсь с этой ошибкой: sudo: извините, у вас должен быть tty для запуска sudo - person Milad; 17.12.2014
comment
@ xe4me Я никогда не говорил, что вы должны удалить его, в зависимости от системы, в которой он действительно требуется. Перезагрузка должна исправить это. - person Geoffroy; 17.12.2014
comment
@Geoffroy, на самом деле первый комментатор, сказал, что я должен удалить и воссоздать: d Нет, перезагрузка не сработала, мне пришлось сказать рут, он исправил это: d - person Milad; 18.12.2014

Что сработало для меня, так это сначала добавить свой SSH-ключ нового компьютера, я выполнил эти инструкции из GitLab - добавить SSH-ключ. Обратите внимание, что, поскольку я использую Win10, мне пришлось выполнять все эти команды в Git Bash в Windows (это не работало в обычной командной оболочке DOS).

С другой стороны, в Git Bash мне пришлось сделать git clone репо, с которым у меня были проблемы, и в моем случае мне пришлось клонировать его с другим именем, поскольку оно у меня уже было локально и я не хотел терять свои коммиты. Например

git clone ssh://git@gitServerUrl/myRepo.git myRepo2

Затем я получил приглашение добавить его в список известных хостов, вопрос может быть таким:

Вы уверены, что хотите продолжить подключение (да / нет)?

Я набрал «да», и, наконец, это сработало, обычно вы должны получить подобное сообщение:

Предупреждение: «[ссылка на ваше репо]» (ECDSA) добавлено навсегда в список известных хостов.

Примечание: если вы работаете в Windows, убедитесь, что вы используете Git Bash для всех команд, это не работало в обычной оболочке cmd или powershell, мне действительно пришлось сделать это в Git Bash.

Наконец, я удалил второе репозиторий клонов (myRepo2 в примере) и вернулся к своему первому репо, и я наконец смог делать все вещи Git, как обычно, в моем любимом редакторе VSCode.

person ghiscoding    schedule 21.01.2018
comment
Действительно, мое приглашение Cygwin выглядит почти так же, как мое приглашение git bash, но оно работает только в приглашении git bash! - person Josiah Yoder; 02.08.2018

На вопрос:

Are you sure you want to continue connecting (yes/no)?

Введите да в качестве ответа.

Вот как я решил свою проблему. Но если вы попытаетесь просто нажать кнопку ввода, это не сработает!

person Victor Bruce    schedule 22.04.2019

Если вы используете git для Windows.

  • Откройте графический интерфейс git.
  • Откройте локальный репозиторий git в графическом интерфейсе git.
  • Добавьте пульт или нажмите, если пульт уже существует.
  • Ответьте «да» на вопрос, хотите ли вы продолжить.

Клиент GUI добавляет ключ к ~/.ssh/known_hosts. Это легче запомнить, если вы не делаете это часто, а также избегаете необходимости использовать командную строку git (стандартные командные строки Windows не имеют исполняемого файла ssh-keyscan.

person Julian Knight    schedule 05.04.2018

Когда удаленный сервер хочет подключиться к частному репо, он аутентифицируется через ssh. Создайте пару закрытый-открытый ключ с помощью ssh-keygen или, если у вас уже есть открытый-закрытый ключ. скопируйте и вставьте открытый ключ в настройках частного репо.

YourPrivateRepo -> Настройки -> Развернуть ключи -> Добавить ключ развертывания -> Вставить открытый ключ.

Теперь удаленный сервер сможет подключиться к частному репо.

ПРИМЕЧАНИЕ. Ключи развертывания имеют доступ только для чтения репо. Необходимо явно разрешить доступ для записи.

person Sandy    schedule 18.07.2019

Это означает, что ваш ключ удаленного хоста был изменен (возможно, изменение пароля хоста),

Ваш терминал предложил выполнить эту команду как пользователь root

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]

Вы должны удалить это имя хоста из списка хостов на вашем компьютере / сервере. Скопируйте предложенную команду и выполните от имени пользователя root.

$ sudo su                                                        // Login as a root user

$ ssh-keygen -f "/root/.ssh/known_hosts" -R [www.website.net]    // Terminal suggested command execute here
Host [www.website.net]:4231 found: line 16 type ECDSA
/root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

$ exit                                                           // Exist from root user

Попробуйте еще раз, надеюсь, это сработает.

person Jay Patel    schedule 14.08.2016
comment
Примечание: в зависимости от вашей оболочки вам, возможно, придется избегать квадратных скобок \ [и \] или использовать кавычки. - person Phlarx; 16.01.2017

Я столкнулся с той же ошибкой внутри DockerFile во время сборки, когда образ был общедоступным. Я немного изменил Dockerfile.

 RUN git clone  https://github.com/kacole2/express-node-mongo-skeleton.git /www/nodejs

Причина в том, что использование синтаксиса [email protected]: ... заканчивается> использованием SSH для клонирования, а внутри контейнера ваш закрытый ключ недоступен. Вы захотите использовать RUN git clone> https://github.com/edenhill/librdkafka.git вместо этого.

person Adiii    schedule 30.07.2018

Решения, упомянутые здесь, великолепны, единственное, чего не хватает, - что, если имена ваших файлов открытого и закрытого ключей отличаются от имен по умолчанию?

Создайте файл с именем config в ~ / .ssh и добавьте следующее содержимое

Host github.com
    IdentityFile ~/.ssh/github_id_rsa

Замените github_id_rsa файлом своего личного ключа.

person RP-    schedule 19.07.2020

Вы можете использовать свой «git url» в формате URL «https» в файле Jenkins или где угодно.

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'

person Nitin    schedule 11.05.2016

Вы можете использовать https вместо ssh для git clone, git pull или git push

ex:

git clone https://github.com/user/repo.git
person Lamri Djamal    schedule 09.08.2020

Причина, по-видимому, в том, что открытый ключ удаленного хоста не хранится или отличается от сохраненного. (Помните о проблемах безопасности, подробности см. В ответе Грега Бэкона.)

Я привык git clone подсказывать мне в этом случае:

The authenticity of host 'host.net (10.0.0.42)' can't be established.
ECDSA key fingerprint is 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)?

Не уверен, почему вместо этого выдается эта ошибка. Это может быть конфигурация вашей оболочки или команда git SSH.
В любом случае вы можете получить то же приглашение, запустив ssh [email protected].

person TheHowlingHoaschd    schedule 13.10.2020

У меня сработала другая альтернатива, вместо клонирования ссылки SSH

[email protected]:upendra/mycode.git

есть возможность выбрать http ссылку

http://gitlab.company.net:8888/upendra/mycode.git

Поэтому я использовал http-ссылку для клонирования для Visual Studio, и у меня это сработало.

person u_pendra    schedule 14.04.2021

Одно небольшое дополнение к ответу Тупи, вам может потребоваться добавить номер порта для вашего хоста репозитория:

ssh-keyscan -p 8888 -t rsa domain.com >> ~/.ssh/known_hosts

Если у вас есть другая машина с удаленным доступом, вы можете найти номер порта, просмотрев ~ / .ssh / known_hosts:

[user]$ less ~/.ssh/known_hosts
[domain.com]:8888,[000.00.000.000]:8888 ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCi...
person andrew    schedule 15.04.2021

Если вы не используете сеанс Windows для обновления кода и используете PortableGit, вам необходимо установить переменную среды HOMEPATH перед запуском команды git.

Этот пример лучше подходит для другого варианта использования, но Я думаю, что это хорошее доказательство правильности этой статьи.

$env:HOMEPATH="\Users\Administrator";C:\path\to\PortableGit\bin\git.exe -C C:\path\to\repository.git pull'

person Tk421    schedule 19.05.2021

Нажатие на Git возвращает код ошибки 403 фатальный: HTTP-запрос не удался

Проверьте, есть ли проблема с выставлением счетов. Google Cloud перестает загружать файлы на https://source.cloud.google.com/

У меня эта проблема исчезла после того, как проблема с оплатой была исправлена. Но ключи не менял.

Спасибо

person dbs 01    schedule 11.06.2021

У меня была аналогичная проблема, к сожалению, я использовал HMI GitExtensions и забыл, что написал кодовую фразу. С HMI .... забудьте об этом! Не вводите кодовую фразу при генерации ключа!

person Jerome Vacher    schedule 22.01.2016

Я получил это сообщение, когда пытался git clone репо, которое не было моим. Исправление заключалось в том, чтобы разветвляться, а затем клонировать.

person fyodrs    schedule 27.04.2018