Загрузка Unreal Engine с Github по ssh.

28. ноября 2021 Unreal Engine 4 0

Вступление.

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:

https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

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:

  1. Нажать на пиктограмму профиля и в выпадающем списке выбрать Settings.
  2. В списке выбрать SSH and GPG keys.
  3. В блоке SHH keys нажать кнопку New SSH key.
  4. В появившееся поле вставить содержимое открытого ключа id_ed25519.pub. Файл можно открыть любым текстовым редактором или выполнить:
    cat ~/.ssh/id_ed25519.pub
    В этом случае содержимое файла окажется в выводе терминала.
  5. Для подтверждения отправки ключа потребуется ввести пароль от Github-аккаунта.
  6. Теперь ключ должен отображаться в блоке 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.

Отпечаток можно сверить по официальной документации:

https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/githubs-ssh-key-fingerprints

В данном примере отпечаток совпал с 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.

Процесс клонирования должен начаться успешно:


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

Ваш адрес email не будет опубликован. Обязательные поля помечены *