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

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

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

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

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

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

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

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

Ответ 1

Вы подключаетесь по протоколу 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 (или даже обычного 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 может хранить материал ключа для удобства (вместо того, чтобы вводить свой пароль для каждого соединения с сервером), и пароли не передаются по сети.

Ответ 3

У меня была похожая проблема, но с использованием ключей SSH. Из ответа Tupy выше я выяснил, что проблема в том, что файл 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.

Ответ 4

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

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

Ответ 5

Для меня мне просто нужно было ввести "да" в приглашении, которое спрашивает "Вы уверены, что хотите продолжить соединение (да/нет)?" а не просто нажать Enter.

Ответ 6

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

mknod -m 666 /dev/tty c 5 0

Ответ 7

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

Host *
StrictHostKeyChecking no
UserKnownHostsFile =/dev/null

Ответ 8

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

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

git clone ssh://[email protected]/myRepo.git myRepo2

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

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

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

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

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

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

Ответ 9

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

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

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

Ответ 10

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

Ваш терминал предложил выполнить эту команду как пользователь 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

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

Ответ 11

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

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

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

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

Ответ 12

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

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

Ответ 13

Я столкнулся с такой же ошибкой внутри 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.

Ответ 14

Когда спросили:

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

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

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

Ответ 15

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

Ответ 16

Хорошо, я только раздробил репо, с которым я хотел работать, затем используйте это...

Вот что я хотел сделать:

npm install 'mtorromeo/vue-strap#vue2'

Затем я получил эту ошибку, которая привела меня сюда:

Host key verification failed.

fatal: Could not read from remote repository.

Затем я просто разветкил это репо и теперь могу использовать:

npm install 'emahuni/vue-strap#vue2' --save-dev

Я думаю, что следующим логическим шагом будет синхронизация восходящего потока:

git remote add upstream https://github.com/mtorromeo/vue-strap.git

так что изменения с восходящего потока вытаскиваются локально, когда я делаю:

git fetch upstream

; -)

Ответ 17

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

Ответ 18

Согласно веб-сайт Университета штата Сан-Франциско:

Это означает, что у хоста есть новый ключ, а отпечаток пальца изменился или вы стали жертвой эксплойта "человек в середине". Чтобы защитить вас, клиент Mac OS X SSH не позволит вам завершить подключение к этому хосту, пока старый ключ не будет удален с вашего компьютера. Если вы определили, что ключ хоста был изменен (см. Инструкции подключения для текущих клавиш), выполните следующие действия, чтобы удалить старый ключ:

  • Откройте терминал в папке "Приложения" > "Утилита".
  • Введите open .ssh в окне терминала, затем нажмите клавишу Return.
  • Откроется папка .ssh, содержащая файл known_hosts. Перетащите known_hosts в корзину, затем закройте папку .ssh. Закрыть терминал.