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

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

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

Новости

Публикации

Хватит ли подземных рек водорода для экологичного энергетического будущего? Ученые рассчитывают минимум на 200 лет

Водород — это не просто легкий газ, но и многообещающий источник энергии, способный совершить революцию в нашем энергетическом ландшафте. Представьте себе: топливо, которое не загрязняет...

Почему монархи «зациклились» на одних и тех же именах?

Имена монархов с порядковыми номерами, такие как Людовик XIV или Генрих VIII, кажутся обычным явлением в истории. Но задумывались ли вы, почему у королей и королев часто повторялись одни и...

Обзор планшета HUAWEI MatePad Pro 12 PaperMatte (2024): клавиатура с тачпадом и 144Гц OLED-экран дарят опыт работы, как на ноутбуке

Планшет HUAWEI MatePad Pro 12 (2024) представляет собой удобное устройство для взаимодействия с экраном. У него есть не просто чехол-клавиатура с механизмом удержания на задней стенке, но также...

Опять спецслужбы или зачем принтеры печатают желтые точки?

Следить за вами можно не только с помощью вебкамер или истории браузера. Шапочку из фольги можно надевать и на принтер тоже. Присмотритесь — может быть ваш принтер один из тех, которые...

Телескоп «Уэбб» обнаружил протопланетные диски, противоречащие моделям формирования планет

Вселенная полна сюрпризов, и телескоп «Джеймс Уэбб» (JWST) не перестает их открывать. Недавние наблюдения за Малым Магеллановым Облаком (ММО) — карликовой галактикой-соседкой Млечного...

Могут ли нейтронные звезды быть легче белых карликов? LIGO и Virgo стремятся обнаружить нейтронные звезды с аномально малой массой

В бескрайних просторах космоса, среди ярких галактик и туманных скоплений, скрываются объекты, чья природа ставит в тупик даже самых продвинутых исследователей. Речь идет о нейтронных...