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
может хранить материал ключа для удобства (вместо того, чтобы вводить свой пароль для каждого соединения с сервером), и пароли не передаются по сети.
Ответ 2
Как я уже говорил ранее в Cloning git repo вызывает ошибку - проверка ключа хоста не удалась. фатальный: удаленный конец неожиданно повесился, добавьте GitHub в список авторизованных хостов:
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
Ответ 3
У меня была похожая проблема, но с использованием ключей SSH. Из ответа Tupy выше я выяснил, что проблема в том, что файл known_hosts отсутствует или github.com отсутствует в списке известных хостов. Вот шаги, которые я следовал, чтобы решить это -
-
mkdir -p ~/.ssh
-
ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
-
ssh-keygen -t rsa -C "user.email"
- откройте открытый ключ с помощью этой команды
$ cat ~/.ssh/id_rsa.pub
и скопируйте его. - Добавьте ключ 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
. Закрыть терминал.