Проблема
GNOME Authenticator (com.belmoussaoui.Authenticator, Flatpak/Flathub) не вміє
напряму читати QR-код "Transfer accounts / Export accounts" з Google
Authenticator. Цей QR несе спеціальний формат
otpauth-migration://offline?data=... (base64 + Protocol Buffers), а не
звичайний otpauth://, який очікує сканер додатку. Ні камера, ні
скріншот-сканер це не підхоплюють. Це підтверджений баг/обмеження проєкту,
а не помилка користувача.
Рішення: extract_otp_secrets
Репозиторій: https://github.com/scito/extract_otp_secrets
(⚠️ раніше називався extract_otp_secret_keys — якщо гуглиться стара назва,
файл скрипта тепер лежить у src/extract_otp_secrets.py, не в корені).
Скрипт розбирає otpauth-migration://... і віддає звичайні otpauth://
записи (або одразу JSON/CSV/Aegis-експорт).
Кроки
Отримати сирі дані з QR. На телефоні: Google Authenticator → меню → Transfer accounts → Export accounts → з'являється QR. Відсканувати його будь-яким сканером QR (не обов'язково камерою ПК) — вийде текстовий рядок
otpauth-migration://offline?data=.... Якщо QR декілька (багато акаунтів) — кожен рядок в окремий рядок текстового файлу.Зберегти рядок(и) у текстовий файл, наприклад
export.txt(по одномуotpauth-migration://...на рядок).Встановити скрипт в ізольований venv (щоб не смітити систему):
git clone https://github.com/scito/extract_otp_secrets.git cd extract_otp_secrets python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt⚠️
requirements.txtтягне важкі й непотрібні для цього кейсу пакети (torch,opencv, CUDA — потрібні лише для розпізнавання QR з фото/камери через YOLO). Якщо на вході вже готовий текстовий рядок (data=...), а не картинка — усе це зайве, але видалити з requirements.txt важко без ризику зламати залежності, тому просто змиритися й прибрати venv після використання (розділ "Прибирання").Розпарсити:
python3 src/extract_otp_secrets.py export.txt --json result.jsonОтримаєш
name,issuer,secret,algorithmдля кожного акаунту.Завести кожен акаунт у GNOME Authenticator вручну — кнопка "+" → ручний ввід (Issuer / Account / Secret) з даних
result.json.Перенос на інші машини (робочий ПК тощо). Скрипт вміє одразу експортувати у формат, який читає Aegis (
--json/--csv+ опціонально шифрований контейнер) — так і зробили: експорт у формат Aegis із паролем, файл переносимо на інший комп'ютер і імпортуємо туди штатним імпортом Aegis-бекапу. Зручно, якщо кінцевий застосунок на іншій машині підтримує Aegis-формат краще, ніж пряме ручне заведення.
Прибирання (важливо!)
Проміжні файли містять секрети у відкритому вигляді:
shred -u export.txt result.json
Зашифрований Aegis-експорт (з паролем) можна лишити для переносу, але краще не тримати його довше, ніж треба, і не в хмарних синках без додаткового шифрування диску.
venv зі скриптом важить кілька гігабайт (torch + CUDA-пакети) — після використання просто видалити разом з клоном:
deactivate
rm -rf extract_otp_secrets # або шлях, куди клонував
Підсумок / чеклист на майбутнє
- [ ] GNOME Authenticator сам QR від Google Authenticator не читає — одразу
йти шляхом extract_otp_secrets, не гаяти час на спроби сканування. - [ ] Файл скрипта:
src/extract_otp_secrets.py(не в корені). - [ ] Вхід: текстовий файл з
otpauth-migration://..., без картинок —найпростіший і найшвидший шлях, важкі image-залежності можна ігнорувати. - [ ] Після імпорту —
shredпроміжних файлів, видалення venv.