🐙 Інструкція з безпеки для розробників ✓ Обов'язкова вимога

Повний посібник із налаштування 2FA на GitHub, резервного SMS та кодів відновлення

Зі зростанням кількості атак на ланцюги постачання програмного забезпечення з відкритим кодом у всьому світі, GitHub запровадив обов'язкову двофакторну автентифікацію (2FA) для всіх розробників. На жаль, щомісяця тисячі інженерів повністю втрачають доступ до своїх організацій і приватних репозиторіїв через легковажне ставлення до кодів відновлення. Цей технічний посібник охоплює конфігурацію TOTP, стандарти холодного зберігання кодів відновлення, взаємодію з ключами SSH та аварійне криптографічне розблокування облікового запису.

2FA
Команда безпеки 2FA-Tool
Оновлено: Жовтень 2026
Орієнтовний час читання: ~13 хв (понад 2 400 слів)
GitHub 2FA Коди відновлення Ланцюг постачання
💡 Головне для розробників (TL;DR)
  • Обов'язкова дія політики є остаточною: Розробники, які не налаштували 2FA до встановленого дедлайну, блокуються від виконання дій у веб-інтерфейсі та виключаються з репозиторіїв організацій.
  • Коди відновлення — це ваш рятівний круг: 16 згенерованих кодів відновлення є одноразовими. Негайно збережіть їх у зашифрованому менеджері паролів або у вигляді фізичної офлайн-роздруківки.
  • Паролі облікового запису більше не працюють у Git: Команди push через HTTPS не підтримують інтерактивне введення 6-значних кодів. Необхідно використовувати ключі SSH або токени з обмеженою областю дії Personal Access Tokens (PAT).
  • Криптографічний останній шанс: Якщо ви втратили телефон і резервні коди, ви можете підтвердити право власності, підписавши контрольне повідомлення зареєстрованим локальним приватним ключем SSH.
01

Огляд обов'язкової політики 2FA на GitHub та аргументи безпеки

Історично компрометація облікових записів розробників призводила до катастрофічних вразливостей ланцюгів постачання програмного забезпечення. Гучні інциденти — такі як захоплення пакунків event-stream, ua-parser-js, ctx та colors.js у реєстрах npm та PyPI — наочно продемонстрували, що один скомпрометований акаунт може поставити під загрозу сотні тисяч комерційних та критично важливих інфраструктурних проєктів.

Зловмисники збирають облікові дані за допомогою глобальних списків витоків паролів, фішингової інфраструктури та шкідливих залежностей. Оскільки інженери-програмісти зазвичай мають права root або адміністратора у вихідному коді та конвеєрах розгортання CI/CD, захист авторів комітів став питанням міжнародної безпеки цифрової інфраструктури.

У відповідь GitHub запровадив масштабну обов'язкову вимогу двофакторної автентифікації для всіх авторів комітів, видавців пакунків, корпоративних користувачів та учасників організацій:

📌 Наслідки пропуску дедлайну підключення 2FA
  • Веб-інтерфейс GitHub блокується модальним вікном, яке забороняє перегляд pull request, коментування issue та адміністрування репозиторіїв до завершення налаштування 2FA.
  • Корпоративні організації з увімкненою вимогою 2FA автоматично виключають учасників-порушників, миттєво відкликаючи права на запис та доступ до репозиторіїв.
  • Автоматизовані робочі процеси, ключі публікації npm та детальні дозволи репозиторіїв заморожуються до проходження повної автентифікації акаунта.
02

Покрокове підключення TOTP-автентифікатора

Хоча GitHub підтримує SMS, мобільні сповіщення та апаратні ключі, додаток TOTP-автентифікації стандарту RFC 6238 (наприклад, Google Authenticator, Bitwarden, 2FA-Tool) залишається золотим стандартом завдяки незалежності від провайдерів і надійності в автономному режимі:

1

Крок 1: Перейдіть до налаштувань автентифікації

Увійдіть у GitHub. Натисніть на аватар свого профілю у правому верхньому кутку ➔ Settings. У лівому навігаційному меню в розділі "Access" виберіть Password and authentication.

Шлях: Settings ➔ Password and authentication ➔ Two-factor methods ➔ Set up authenticator app
2

Крок 2: Відскануйте QR-код та збережіть вихідний секретний ключ Base32

GitHub показує оптичний QR-код поруч із текстовим посиланням: "enter this text code instead".

💡 Порада з безпеки: Натисніть це посилання та скопіюйте 32-значний секретний ключ Base32 (наприклад, A3J5N2O9...). Збережіть його у своєму зашифрованому менеджері паролів. Цей літерно-цифровий ключ дозволить вам згенерувати токени автентифікації на будь-якому пристрої, якщо телефон буде пошкоджено чи втрачено.
3

Крок 3: Введіть 6-значний код для підтвердження

Відскануйте код за допомогою мобільного автентифікатора. Введіть динамічний 6-значний номер з екрана в поле підтвердження на GitHub і натисніть "Continue".

03

Стандарти збереження кодів відновлення та криптографічна гігієна

Після успішного налаштування TOTP GitHub негайно показує модальне вікно з 16 шістнадцятковими кодами, розділеними дефісом (наприклад, d4a2b-98f12). Закриття цього вікна без надійного збереження є найчастішою причиною безповоротної втрати доступу до акаунта розробника.

🚨 Криптографічні особливості кодів відновлення

1. Тільки одноразове використання: Кожен код відновлення безповоротно анулюється після першого використання замість коду TOTP.
2. Найвищий пріоритет: Код відновлення обходить відсутність пристрою та надає миттєвий доступ до облікового запису.
3. Хешування з нульовим розголошенням (Zero-Knowledge): GitHub зберігає ці коди виключно у вигляді незворотних криптографічних гешів. Інженери служби підтримки GitHub за жодних обставин не можуть відновити або переглянути ваші початкові коди!

Рекомендована трирівнева стратегія холодного зберігання:

🥇 Вкладення у сховище паролів

Завантажте github-recovery-codes.txt і додайте його до запису GitHub у 1Password, Bitwarden або KeePassXC із використанням майстер-ключів на базі Argon2id.

🥈 Офлайн-накопичувач (Air-Gapped)

Збережіть текстовий файл на зашифровану за допомогою VeraCrypt автономну USB-флешку, відключену від мереж і хмарних сервісів синхронізації.

🥉 Водостійка паперова роздруківка

Роздрукуйте фізичну паперову копію, заламінуйте її для захисту від вологи та сховайте у сейфі, захистившись від віддалених програм-викрадачів (інфостілерів).

Попередження щодо безпеки буфера обміну: Копіюючи 16 кодів відновлення, пам'ятайте про менеджери історії буфера обміну (Alfred, Raycast, Windows Clipboard History). Конфіденційні коди у відкритому вигляді можуть бути перехоплені шкідливим ПЗ. Завжди очищайте історію буфера обміну одразу після вставки кодів у зашифроване сховище.
04

Резервні методи автентифікації: SMS проти Passkeys проти GitHub Mobile

GitHub дозволяє налаштовувати додаткові запасні механізми. Ознайомтеся з порівняльним аналізом безпеки сучасних методів автентифікації:

Метод Стійкість до фішингу Вразливість до SIM-Swap Оцінка та практичне застосування
Passkeys / Апаратні ключі FIDO2 Абсолютна (прив'язка до джерела WebAuthn блокує проксі-фішинг) Повний імунітет ⭐⭐⭐⭐⭐ Головна рекомендація (YubiKey / Touch ID)
Додаток TOTP-автентифікації Середня (вразливий до зворотних проксі в реальному часі) Повний імунітет ⭐⭐⭐⭐ Універсальний базовий рівень (повна автономність)
Підтвердження в додатку GitHub Mobile Середня (вимагає вибору 2-значного числа на екрані) Повний імунітет ⭐⭐⭐⭐ Чудова щоденна зручність
Резервне SMS-підтвердження Нульова (незашифрована сигналізація SS7, легке перехоплення) Високий ризик ⭐ Не рекомендується для авторів популярних проєктів
05

Робота з Git у терміналі: ключі SSH, токени PAT та взаємодія з 2FA

Після активації 2FA розробники часто стикаються з помилками термінала під час регулярного надсилання коду:

remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed for 'https://github.com/username/repo.git/'

Технічне обґрунтування: Протокол зв'язку Git не здатний обробляти інтерактивні діалоги для введення 6-значних кодів TOTP. Тому GitHub остаточно скасував використання звичайних паролів облікового запису для запитів Git через HTTPS, коли увімкнено 2FA.

🔑 Варіант A: Автентифікація за ключем SSH (Рекомендовано)

Використовує асиметричну криптографію з відкритим ключем (рекомендовано: ed25519). З'єднання через SSH автентифікуються за допомогою локальних приватних ключів і повністю оминають веб-2FA без постійних запитів облікових даних.

ssh-keygen -t ed25519 -C "[email protected]"
🎫 Варіант B: Персональні токени доступу (PAT)

Якщо використання HTTPS є обов'язковим, перейдіть у Settings ➔ Developer settings ➔ Personal access tokens і створіть токен із потрібними дозволами. Під час запиту пароля в інтерфейсі командного рядка (CLI) вставте PAT замість пароля облікового запису.

Підписування комітів через SSH проти автентифікації: Зверніть увагу: використання ключа SSH для клонування та пушу репозиторіїв відрізняється від криптографічного підписування комітів. Ви можете використовувати ту саму пару ключів Ed25519 для підпису комітів за допомогою команд git config commit.gpgsign true та git config gpg.format ssh, отримуючи підтверджені значки "Verified" на GitHub поруч із суворим контролем доступу 2FA.

06

Аварійне відновлення: розблокування облікового запису без 2FA

У разі критичної ситуації, коли телефон із 2FA втрачено, а файл із кодами відновлення недоступний, GitHub надає останній криптографічний порятунок: випробування підписом ключа SSH (SSH Key Signature Challenge).

1
Подача апеляції на розблокування Під час запиту 2FA під час входу натисніть "Unable to verify via 2FA?" ➔ виберіть "Use emergency recovery code" ➔ якщо коди відсутні, натисніть "Request two-factor authentication reset".
2
Перевірка одноразового коду з електронної пошти GitHub надішле 6-значний PIN-код підтвердження на вашу основну перевірену поштову адресу. Введіть цей код для переходу до перевірки особистості.
3
Виконання випробування ключем SSH у локальному терміналі GitHub генерує унікальний рядок запиту (challenge nonce) і пропонує підписати його на вашій робочій станції за допомогою термінала:
echo "UniqueChallengeString" | ssh-keygen -Y sign -n "github" -f ~/.ssh/id_ed25519
Вставте згенерований блок підпису у веб-портал. GitHub математично перевірить відповідність підпису зареєстрованому відкритому ключу SSH, підтвердить право власності на акаунт і розблокує профіль після завершення терміну перевірки.
🔒 Клієнтська криптографічна пісочниця

Перевірте секретний ключ TOTP для GitHub локально

Перед завершенням налаштування перевірте свій вихідний секретний рядок Base32 у 2FA-Tool. Усі геші розраховуються локально за допомогою Web Crypto без передачі на сервер.

Відкрити онлайн-генератор