Загрузка Unreal Engine с Github по ssh.
Вступление.
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
fatal: Authentication failed for 'https://github.com/EpicGames/UnrealEngine.git/'
С конца августа 2021 года Github перешёл на новую политику безопасности и стал показывать выше описанное предупреждение. Теперь для работы с репозиториями посредством git необходимо настроить двухфакторную аутентификацию через сторонний сервис или использовать ssh с шифрованием. Первый вариант неприемлем по многим причинам, поэтому остаётся только ssh. Задача несложная, но требует нескольких шагов.
Генерация ключей.
Сначала необходимо сгенерировать и добавить в Github-аккаунт собственный открытый ssh-ключ, что позволит осуществлять git-операции по ssh:
Github рекомендует использовать ключ с криптографией Ed25519. Пример генерации ssh-ключа с криптографией Ed25519:
ssh-keygen -t ed25519 -C "igor@github.com"
-t
— явно указать тип криптографии для генерации ключа. В данном случае это Ed25519.
-С
— комментарий в файле публичного ключа. В документации Github подразумевается, что нужно указать имя Github-аккаунта.
После выполнения команды отобразится диалог:
Enter passphrase (empty for no passphrase):
Это запрос на создание парольной фразы (обычного пароля). Github настоятельно рекомендует использовать парольную фразу в качестве средства дополнительной защиты на случай компрометации закрытого ключа, поэтому стоит создать пароль хотя бы из 12 символов. В следующем диалоге будет предложено повторить пароль для проверки корректности ввода.
Примечание: Если ключ был создан без пароля, то его можно добавить:
ssh-keygen -pf ~/.ssh/id_ed25519
-p
— принудительно задать или сменить пароль.
-f
— передать путь до файла закрытого(!) ключа, для которого нужно добавить или поменять пароль.
После процесса генерации ключи (закрытый и открытый) окажутся в ~/.ssh/.
- Закрытый: id_ed25519
- Открытый: id_ed25519.pub
Для удобства их можно переименовать по вкусу.
Добавление ключа в Github-аккаунт.
Теперь полученный открытый(!) ключ, обозначенный расширением .pub, нужно добавить в аккаунт на Github:
- Нажать на пиктограмму профиля и в выпадающем списке выбрать Settings.
- В списке выбрать SSH and GPG keys.
- В блоке SHH keys нажать кнопку New SSH key.
- В появившееся поле вставить содержимое открытого ключа id_ed25519.pub. Файл можно открыть любым текстовым редактором или выполнить:
cat ~/.ssh/id_ed25519.pub
В этом случае содержимое файла окажется в выводе терминала. - Для подтверждения отправки ключа потребуется ввести пароль от Github-аккаунта.
- Теперь ключ должен отображаться в блоке SHH keys:
После этого можно проверить работоспособность соединения. Команда для установки пробного соединения:
ssh git@github.com
Если соединение не проходит и завершается «Connection timed out», то необходимо проделать следующее. В файл ~/.ssh/config добавить:
Host github.com User git Hostname ssh.github.com
Сохранить изменения.
Теперь при выполнении ssh git@github.com в выводе должно быть следующее:
The authenticity of host '[ssh.github.com]:443 ([140.82.121.36]:443)' can't be established.
RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
Отпечаток можно сверить по официальной документации:
В данном примере отпечаток совпал с SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8 (RSA)
Это означает, что подключение осуществляется именно к github.com, а не к какому-то стороннему домену.
Далее задаётся вопрос:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Если ответить утвердительно, то будет подобный вывод:
Warning: Permanently added '[ssh.github.com]:443,[140.82.121.36]:443' (RSA) to the list of known hosts.
Hi Igor! You've successfully authenticated, but GitHub does not provide shell access.
Connection to ssh.github.com closed.
Соединение было успешно установлено и закрыто, что означает работоспособность ранее добавленного ключа.
Удалить ранее сделанную запись из ~/.ssh/config и сохранить изменения.
Загрузка Unreal Engine по ssh.
Перед началом загрузки необходимо ещё раз отредактировать ~/.ssh/config, внеся данные для установки соединения явным образом, включая путь до файла закрытой части ключа. Если этого не сделать, github.com может не распознать аккаунт, что приведёт к ошибке доступа:
ssh: git@github.com: Permission denied (publickey). fatal: Could not read from remote repository.
Пример заполнения ~/.ssh/config:
# Адрес сервера Host github.com # Логин аккаунта на github User Igor # Адрес для установки зашифрованного соединения по ssh Hostname ssh.github.com # Файл закрытой части ключа, открытая часть которого была добавлена в аккаунт на github IdentityFile ~/.ssh/id_ed25519
Теперь можно клонировать репозиторий.
Сначала потребуется получить ссылку на репозиторий. Для ssh это делается так:
Получив адрес репозитория, можно приступить к загрузке содержимого, используя ssh-соединение. Для этого в терминале открыть каталог, в который будут загружены файлы из указанного репозитория, и выполнить команду на загрузку, указав желаемую ветку:
git clone -b release git@github.com:EpicGames/UnrealEngine.git
-b — для опции указать название ветки. В данном случае будет загружена ветка release.
Процесс клонирования должен начаться успешно: