Ошибка 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 так и не смог разобраться, слишком слаб интеллектом. Но в Линукс всё так интуитивно и понятно. Обычно либо есть, либо ставится одной командой. В винде как всегда.

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

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

Новости

Публикации

Кросс-боди сумка — отличный вариант для людей со стомой, и вот почему. Личный опыт

Выбор сумки или рюкзака является настолько же важным и индивидуальным процессом, как и выбор одежды. Этот выбор упирается во множество факторов: вместительность, размер, количество отсеков,...

Апгрейд или помойка: стоит ли обновлять старый ПК в 2024

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

Что нужно в доме для попугая

Попугай — умная птица, которая обладает своим характером и потребностями. Приобретая попугая, вы, по сути, обретаете нового члена семьи. Чтобы у пернатого всегда было хорошее настроение...

Кулинарная геометрия: зачем круглой пицце квадратная коробка

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

Обзор косметического универсального холодильника ZUGEL ZCR005

Не каждое косметическое средство можно хранить на туалетном столике, некоторым требуется хранение в холодильнике. Поэтому сегодня мне хотелось бы рассказать о косметическом универсальном...

7 вещей, которые любят практически все домашние кошки

Любая кошка — это яркая индивидуальность со своим видением мира! Характер, предпочтения, привычки, поведение у каждой кошки свои. Но есть семь вещей, которые обожает практически любая...