Ошибка 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 по ссылке.

Автор не входит в состав редакции iXBT.com (подробнее »)
Об авторе
Люблю Snowrunner, Volvo, царство грибов, пиво, Петроградскую сторону, а также порой очень странные вещи.

Вступайте в мой секретный телеграм. Бесплатный ранний доступ и участие в престижном закрытом клубе гарантировано.

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

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

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

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

Новости

Публикации

Sven, который смог: обзор полноразмерных наушников AP-B780MV с ANC

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

Напольный, вертикальный или робот: какой пылесос выбрать для дома

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

Тест колонок Eltronic с акустической гитарой. А что скажут гитаристы?

Истории
Бренд ELTRONIC — это акустические колонки большого размера с широким функционалом. Они предназначены не только для прослушивания музыки, но и для проведения разнообразных мероприятий. При этом у...

Кибер Бэкап работает на ОС Атлант

Прочее
Российский производитель программных продуктов для создания резервных копий, защиты и восстановления данных «Киберпротект» и компания «АТЛАНТ» подтвердили совместимость программных продуктов....

Обзор-сравнение 7,8-дюймовых ридеров Onyx Boox

Обзор
Компания Onyx Boox, главный поставщик на российский рынок электронных ридеров, довольно плодовита: новые устройства бренда появляются каждые 2-3 недели, и неподготовленному человеку довольно...

Конкурс идей летнего отдыха на выходные от авторов iXBT.Live

Прочее
Чуть больше года назад, 18 мая 2022 года, мы запустили блог «Путешествия и туризм», который довольно быстро вырос в отдельный раздел. Хотим отметить это знаменательное событие, и запускаем новый...