Іноді після додавання в систему нового сховища або закінчення терміну дії ключа вже використовуваного сховища ви можете спостерігати повідомлення яке наприклад містить таку фразу: NO_PUBKEY 85C2394343D5CDFA.
Для розв’язання цієї проблеми ми написали найповнішу інструкцію.
Як додати цей ключ і усунути цю проблему? – можливо це одне з питань що з’являється найбільш часто у всіх хто додавав репозиторії у свою систему крім системних за замовчуванням.
У цій статті я постараюся викласти все варіанти вирішення які я зустрів в Інтернет на різних сайтах.
Тому хочу попросити вас дочитати її до кінця, а не зупинятися на першій команді, тим більше якщо вона видала у вас помилку.
Відразу для розуміння самої проблеми, визначимося навіщо потрібні ці самі ключі та чому їх вимагає система.
А потрібні вони всього лише для однієї мети – захист сховища від підміни зловмисником в ньому інформації за технологією відкритих/закритих ключів. Наша система зберігає у себе першу частину ключа (відкритий ключ), а власне сховище звідки ми беремо файли підписаний другою частиною ключа (закритий ключ), який нам не доступний.
Іншими словами відкритий ключ сховища який зберігається в нашій системі – це свого роду цифровий підпис сховища. Він гарантує що все що ми завантажуємо зі сховищ – легально і безпечно. Тим більше в останніх дистрибутивах, якщо репозиторій не підписаний – він вважається не перевіреним і з нього ігноруються всі програми. Але не буду заглиблюватися в цю тему зараз, вона гідна ще однієї статті, що б розповісти як це працює, тому продовжимо.
За приклад візьмемо Debian-подібну систему.
Отже, наша система зберігає у себе відкриті ключі сховищ у двох місцях:
- Файл
/etc/apt/trusted.gpg
– це один великий файл, в якому може бути інформація про декілька ключах відразу. - Тека
/etc/apt/trusted.gpg.d/
– в цій директорії може знаходиться багато файлів з різними назвами, подібних вказаному в попередньому пункті.
За замовчуванням в ній зазвичай вже знаходяться такі файли як:
ubuntu-keyring-2012-archive.gpg
ubuntu-keyring-2012-cdimage.gpg
ubuntu-keyring-2018-archive.gpg
Відразу хочу звернути увагу на розширення файлу в цій теці. Система обробляє тільки два можливих варіанти файлів ключів.- файл ключа <имя фала>.gpg – вміст зберігається у двійковому (бінарному) вигляді.
- файл ключа <имя фала>.asc – вміст файлу має бути у текстовому вигляді.
Причому вміст файлу і його розширення не варто плутати між собою, тобто якщо у вас ключа у файлі буде в текстовому вигляді, а ви вкажете у файлу розширення .gpg, то система його просто проігнорує.
Відкриті ключі, необхідні системі для того, що б перевірити справжність сховища до якого вона звертається, зазвичай можуть перебувати у двох місцях:
- На публічних загальнодоступних серверах зберігання публічних ключів. В цьому випадку рекомендується брати їх з гарантованих джерел.
Наприклад:
http://keyserver.ubuntu.com/
https://keyring.debian.org/
http://keys.gnupg.net/
https://pgp.mit.edu/ - Безпосередньо у розробника сховища. Зазвичай сам постачальник сховища про це і повідомляє у себе на сторінці та публікує коротку інструкцію як його додати.
- Наприклад, ви можете побачити ось такий рядок:
wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -
яка додає ключ сховища безпосередньо в файл/etc/apt/trusted.gpg
- або ось такого плану:
sudo curl -o /etc/apt/trusted.gpg.d/agp-debian-key.gpg http://download.ag-projects.com/agp-debian-key.gpg
яка кладе файл сховища у теку/etc/apt/trusted.gpg.d/
- Наприклад, ви можете побачити ось такий рядок:
Ми розглянемо додавання ключа з серверів зберігання відкритих ключів. Так як 90% ключів може бути виявлено на них, а решта 10% потрібно дивитися як їх додати безпосередньо на сайті розробника сховища.
Для цього запускаємо термінал і вводимо всього одну лише команду:
$ sudo apt-key adv --keyserver <strong>name_keyserver</strong> --recv-keys <strong>key_id</strong>
де
name_keyserver – беремо один з довірених джерел публічних ключів. наприклад keyserver.ubuntu.com.
key_id – цифровий ідентифікатор необхідного нам ключа. Якщо брати приклад нашого випадку, то це буде 85C2394343D5CDFA. Можна також спочатку цього коду додати 0x, що буде говорити системі що це число в шістнадцятковій системі числення.
Отже, вводимо команду:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 0x85C2394343D5CDFA
Противник переможений і ключ доданий в систему!
Тепер я хотів би озвучити різні додаткові плюшки розв’язання цієї проблеми.
- Якщо у вас всього один лише ключ, то рядок можна ще вкоротити на пару символів і замість ключа
--recv-keys
використовувати просто:--recv
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 0x85C2394343D5CDFA
- Також можна не вказувати спецсимвол 0x в цифровому ідентифікаторі ключа::
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 85C2394343D5CDFA
- Бувають випадки коли на цю команду система не реагує та починає довго думати. Врятувати ситуацію може наступний синтаксис вказівки сервера ключів:
$ sudo apt-key adv --keyserver <strong>hkp://keyserver.ubuntu.com:80</strong> --recv 85C2394343D5CDFA
- Якщо у вас вихід в інтернет доступний тільки через проксі, тоді необхідно додати відповідну опцію:
--keyserver-options http-proxy="http://your_proxy_server:port"
де
your_proxy_server – ім’я або IP-адреса вашого проксі
port – його порт
В результаті отримаємо приблизно ось такий вигляд команди
$ sudo apt-key adv <strong>--keyserver-options http-proxy="http://192.168.0.1:3128"</strong> --keyserver keyserver.ubuntu.com --recv 85C2394343D5CDFA
- Якщо у вас бракує відразу багато ключів і ви не хочете додавати кожен по черзі, вам повинна допомогти ось така команда:
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys <strong>`sudo apt-get update 2>&1 | grep -o '[0-9A-Z]{16}$' | xargs`</strong>
Яка створить список всіх відсутніх ключів і відразу загальною купою їх додасть. У цій команді також можна додавати опції зазначені в пунктах 3 і 4. - Ще є варіант “як робили раніше”. Це в тому випадку, якщо не допомогло все вищесказане.
- Спочатку отримуємо публічний ключ і зберігаємо його безпосередньо в призначеній для користувача базі. Ключі у кожного користувача зберігаються в теці ~ / .gnupg, яка розташована в його домашній теці.
$ gpg --keyserver keyserver.ubuntu.com --recv-keys 0x85C2394343D5CDFA
Цю команду також можна писати в інтерпретаціях як ми описували вище. - А тепер робимо експорт цього ключа вже з нашої користувача бази та додаємо його в базу системних ключів APT
$ gpg --export --armor 85C2394343D5CDFA | sudo apt-key add --
або так
$ gpg -a --output /tmp/pub.asc --export 85C2394343D5CDFA
$ sudo apt-key add /tmp/pub.asc - Або ще простіше. Просто проведіть експорт ключа відразу в теку
/etc/apt/trusted.gpg.d/
$ sudo gpg -a --output /etc/apt/trusted.gpg.d/required_key.asc --export 85C2394343D5CDFA
- Спочатку отримуємо публічний ключ і зберігаємо його безпосередньо в призначеній для користувача базі. Ключі у кожного користувача зберігаються в теці ~ / .gnupg, яка розташована в його домашній теці.
Якщо у вас є ключ сховища у вигляді файлу, його також можна додати використовуючи графічну утиліту
$ sudo software-properties-gtk
Як ви здогадалися, через кнопку “Імпортувати файл ключа”.
Але як на мене це більше погратися ніж зручність, особливо з огляду на те, що більшість ключів у файлах не буває.
У цій же утиліті можна переглянути ті ключі, які вже встановлені в системі або видалити.
Усе. Начебто нічого не упустив.
Чи допомогла вам ця стаття?
Або ви знаєте ще щось, чого не вказано в цій статті?
Всі зауваження та неточності прошу вказувати в коментарях.
Буду відразу намагатися оперативно виправляти помилки або доповнювати статтю.
Спасибо, помогло для Dеbian -> booster. Достаточно было ввести команду
apt-key adv --keyserver <strong>name_keyserver</strong> --recv-keys <strong>key_id</strong>
<strong>три раза для трёх ключей(два оказались не нужными - они не для бустера).</strong>
<strong>Всё остальное - не пригодилось. Огромное спасибо!!!</strong>