Ошибка 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) - признана экстремистской организацией на территории Российской Федерации

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

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

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

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

Новости

Публикации

Ящерица Ван Гога: как искусство прячется в природе

Природа и искусство всегда шли рука об руку, вдохновляя друг друга. Художники черпают идеи из природных форм и красок, а сама природа порой создает шедевры, достойные кисти великих мастеров....

Обзор беспроводной клавиатуры без цифрового блока Zone 51 Citrin

Компактная, но функциональная клавиатура Zone 51 Citrin выглядит современно и элегантно, несмотря на отсутствие цифрового блока ее нельзя назвать урезанной версией, функционал клавиатуры широк...

Как выбрать светодиодные лампы для автомобиля

Установка светодиодных ламп в головной свет своего авто — довольно простая, но полезная доработка. В этой статье я доступно объясняю, на какие параметры ламп стоит обращать внимание,...

Тексты песен становятся проще: эволюция или деградация?

Музыка — зеркало эпохи. Она отражает не только настроения и мысли общества, но и его языковые особенности. Интересное исследование, опубликованное в журнале Scientific Reports, проливает...

Почему в 1942 году на танке «Т-34» стали приваривать стальную планку перед люком мехвода

В начале Великой Отечественной войны танк «Т-34» являлся одним из наиболее передовых в мире. Его высокая манёвренность, надежность и мощное вооружение делали его сильным противником на поле боя....

Как конкистадоры и насекомые подарили миру красный цвет

Красный — цвет страсти, огня, крови. Цвет, который на протяжении тысячелетий притягивал и очаровывал человечество. Его история — это не просто хроника использования пигмента,...