Ошибка GitHub “Remote host identification has changed!”: как исправить и чем вызвана

Пост опубликован в блогах iXBT.com, его автор не имеет отношения к редакции iXBT.com
| Записки разработчика | Программы, сервисы и сайты

Если вы работали с GitHub по SSH и вдруг встретились с ошибкой @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @, у меня для вас две новости: хорошая и плохая. Хорошая: ошибку исправить можно. Плохая: придётся немного заняться камасутрой.

Источник: kinsta.com

Что произошло?

24 марта 2023 года GitHub изменил свой серверный SSH ключ из-за кратковременной утечки внутренней информации компании. Простыми словами, они выложили не тот файл не в то место, но быстро среагировали и написали об этом.

Фанаты сервиса могли прочитать новость в блоге компании. Но если вы не фанат GitHub, то вы, скорее всего, узнали об этом из страшного сообщения в консоли при попытке взаимодействия со своим репозиторием на сайте:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

Как исправить?

В официальном сообщении из блога GitHub предлагают такое вот решение:

1. Удалить старые ключи простой командой:

$ ssh-keygen -R github.com

2. Затем вручную добавить следующую строчку в файл known_hosts:

github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=

Файл known_hosts располагается:

  • ~/.ssh/known_hosts в ОС семейства Linux
  • C:\Users\USERNAME\.ssh в ОС Winodws

Если вы работаете на Linux, можно поступить ещё проще -- выполнить две команды:

$ ssh-keygen -R github.com
$ curl -L https://api.github.com/meta*  | jq -r '.ssh_keys | .[]' | sed -e 's/^/github.com /' >> ~/.ssh/known_hosts

Но если вы используете Windows, велика вероятность того, что официальная инструкция вам нихрена не поможет. Мне не помогла, даже после ручного редактирования файла known_hosts пуш в GitHub по SSH у меня не получился.

Немного камасутры

Короче, официальный метод не работает. Что делать дальше? Поскольку я значительно глупее чем Chat GPT 4, мне потребовалось несколько часов, много нецензурных ругательств и тонна нервных клеток, чтобы найти решение.

1. Установите сервер Open SSH. Перейдите в: Параметры системы (звёздочка в меню пуск) > Приложения и возможности > Управление дополнительными компонентами > Добавить компонент > Сервер OpenSSH

2. Дождитесь завершения установки. Если при установке произошёл сбой, проверьте, возможно у вас уже есть установленный сервер OpenSSH в папке C:\Windows\System32\OpenSSH. Честно сказать, не припоминаю, чтобы я что-то такое выполнял при первоначальной установке Git.

3. Затем настраиваем переменные среды - подсказываем системе, где искать SSH-сервер. Правой кнопкой мыши на "Мой компьютер" > свойства > Дополнительные параметры системы > Переменные среды > Создать переменную. Можно создать на уровне пользователя, а можно на уровне системы, без разницы.

4. Создайте переменную с именем GIT_SSH и значением C:\Windows\System32\OpenSSH.

5. Проверьте работоспособность SSH-сервера. Откройте Powershell под администратором И выполните последовательно команды:

> Get-Service ssh-agent

Status   Name               DisplayName
------   ----               -----------
Stopped  ssh-agent          OpenSSH Authentication Agent

Команда проверит, где располагается служба SSH-сервера.

> Get-Service ssh-agent | Select StartType

StartType
---------
Disabled

Команда покажет статус службы SSH-сервера. В ответ можно получить три варианта ответа: Disabled - служба остановлена, Manual - служба запускается вручную и Automatic - служба запускается автоматически. Дальше необходимо указать то, как служба будет запускаться.

> Get-Service -Name ssh-agent | Set-Service -StartupType Automatic

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

Служба OpenSSH Server

6. По идее на этом шаге всё, можно бежать клонировать репозитории по SSH. Но мне пришлось потупить ещё немного.

7. Сперва пришлось запустить сам SSH-агент так, чтобы система его обнаружила.

Часто рекомендуют сделать это при помощи следующей команды:

eval "$(ssh-agent)"

Но вы им не верьте, это команда для Linux, в Винде она не работает. Поэтому используйте вот эту команду:

ssh-agent bash

8. И вот теперь можно добавить SSH-ключ стандартной командой:

ssh-add <путь-до-ключа>

9. Если команда не сработала, а вы уже на взводе, есть решение. Идите в диспетчер задач и остановите все-все сервисы ssh. 

Затем повторите шаги 7-8.

10. Если система всё ещё упорно отказывается воспринимать ключи, придётся действовать радикально. Идите в каталог C:\Users\USERNAME\.ssh и снесите всё к чёртовой бабушке.

Заново создайте в папке файл с именем known_hosts без расширения, добавьте в него строки, предоставленные GitHub:

github.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOMqqnkVzrm0SdG6UOoqKLsabgH5C9okWi0dh2l9GKJl
github.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBEmKSENjQEezOmxkZMy7opKgwFB9nkt5YRrYMjNuG5N87uRgg6CLrbo5wAdT/y6v0mKV0U2w0WZ2YB/++Tpockg=
github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=

Я не стал запариваться, просто скопировал все три строки и вставил их в пустой файл.

11. Затем я снова остановил все SSH-агенты и заново выполнил команду:

ssh-add <путь-до-ключа>

Теперь всё заработало. Надеюсь, эта инструкция вам помогла.

Инструкция, как сгенерировать SSH-ключ уже любезно предоставлена GitHub по ссылке.

  • * — Компания Meta (социальные сети Instagram и Facebook) - признана экстремистской организацией на территории Российской Федерации
Автор не входит в состав редакции iXBT.com (подробнее »)
Об авторе
Пишу под ником Grolribasi, люблю лонгриды на нишевые темы, чтобы лучше в них разобраться.
Веду канал в телеграме: @grolchannel

9 комментариев

GennDALF
Разве GitHub ещё несколько лет тому назад не рекомендовал переходить с SSH аутентификации на HTTPS и использовать PAT?
Я грешным делом думал, что они вообще прикрыли SSH аутентификацию.
Grolribasi
В том году они прикрыли HTTPS auth. Рекомендуют токены использовать, но этот способ ИМХО не стоит вложенных усилий для его настройки.
GennDALF
Они прикрыли отправку логина и пароля по HTTPS и заменили их на токены. Но аутентификация с PAT всё равно остаётся HTTPS аутентификацией.
GennDALF
ИМХО, это ваш способ с OpenSSH сервером на Win не стоит усилий =)
Хотя кому-то ваш материал, конечно, пригодится.
Grolribasi
Можно воспользоваться Git Bash, он у меня сразу принял SSH, но гит клиент в IDE всё равно отказывался, пришлось вот заморочиться.
Вот с WSL так и не смог разобраться, слишком слаб интеллектом. Но в Линукс всё так интуитивно и понятно. Обычно либо есть, либо ставится одной командой. В винде как всегда.

Добавить комментарий

Сейчас на главной

Новости

Публикации

Пассивная система охлаждения и многое, многое другое: обзор Chatreey MR02

Chatreey MR02 — компактный компьютер с пассивной системой охлаждения, процессором N100 и ещё парой «точек интереса», которые будет видно по ходу обзора. Но одна из них видна сразу на...

Подготовка ежевики к зиме: как правильно обрезать и избежать ошибок

Ежевика — многолетнее растение, которое нуждается в специальном уходе перед зимовкой. Зимняя подготовка ежевики включает обрезку, укрытие и другие важные процедуры, которые помогут...

Заменит жену на кухне! Обзор мультикухни REDMOND SkyKitchen RMK-CB391S: 200 рецептов, 21 автоматическая программа и управление со смартфона

Представьте, что на вашей кухне появился новый член семьи — верный помощник, который умеет готовить лучше, чем многие из нас. Мультикухня REDMOND RMK-CB391S с гордостью заявляет:...

Запущен первый в мире деревянный спутник: решение проблемы космического мусора?

Космическая эра, подарившая человечеству невиданные технологические возможности, столкнулась с неожиданной проблемой — космическим мусором. Тысячи отработавших спутников, обломков ракет...

Десять лет вышел Google Nexus 6 — один из самых неоднозначных смартфонов компании. Что с ним было не так

Осенью 2014 года на свет появился смартфон Google Nexus 6. На сей раз американская компания заручилась поддержкой соотечественника Motorola, хотя тот к тому времени формально уже принадлежал...

Сколько деревьев нужно посадить, чтобы победить городскую жару? Ученые разработали новый инструмент для планирования

Урбанизация, несомненно, несет с собой ряд вызовов, среди которых особое место занимает проблема городских «островов тепла». Повышение температуры в мегаполисах по сравнению с прилегающими...