У терміналі з'являється повідомлення про systemd-tty-ask-password-agent, а тунель не піднято. Спокусливе прочитання — VPN відхилив пароль і щось тепер чекає на виправлення. Точніше сказати, що служба попросила в systemd інтерактивне введення, і запит ще не отримав відповіді. Яка служба запитала і який секрет їй потрібен — два питання, які можна вирішити до того, як щось набирати.

Хто має відповісти, вирішують дві умови

Перша умова — чи ви запускали цей примірник навмисно. Запит, що йде за вашою дією, ваш для відповіді, а той, що з'являється без відповідної дії, належить чомусь іншому. Друга — чи є секрет аутентифікацією облікового запису або захистом ключа, бо вони живуть у різних місцях і проходять різними шляхами коду. Обидві відповіді видно в журналі, якщо подивитися до дії.

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

Це все правило, і його варто викласти перед командами. Усе подальше випливає з нього.

Перелічіть запити, перш ніж щось набирати

Агент може перелічити те, що чекає, ні на що не відповідаючи. sudo systemd-tty-ask-password-agent --list виводить необроблені запити, і цей вивід — доказ, потрібний, щоб пов'язати запит з юнітом. Прочитайте його перед тим, як дати облікові дані, і тримайте описи запитів поза будь-якою публічною діагностичною вставкою.

Зіставте список із розпочатою операцією та з юнітом, якому вона належить. Якщо ніщо у списку не відповідає вашій дії, побачений запит належить іншій службі, і не вам його вирішувати. Ім'я юніта у списку — єдиний надійний зв'язок між запитом і службою.

Не відповідайте на запит, який не можете приписати. Ціна очікування — затримка, а ціна відповіді на неправильний запит — облікові дані не в тому місці.

Який секрет насправді потрібен примірнику?

auth-user-pass стосується аутентифікації облікового запису в службі VPN, і без файлу облікових даних документована поведінка — запитати в консолі. askpass натомість отримує парольну фразу, що відмикає захищений ключовий матеріал, і робить це до того, як процес перейде у фон. Це різні секрети з різним строком життя.

Формати файлів теж різняться. Форма облікового запису очікує рядок імені користувача і рядок пароля, тоді як файл парольної фрази ключа читає перший рядок як свій пароль. Копіювання рецепта файлу облікових даних з іншої ролі зазвичай дає ще один запит замість рішення. Файл неправильної форми гірший за відсутність файлу, бо збій переходить у місце, за яким ніхто не стежить.

Перевірте, яку директиву використовує примірник, перш ніж вирішувати, що набирати. Назва директиви підказує, для якого секрету призначено запит.

Що робить --query, чого не робить --list

--query обробляє кожен запит, що очікує, на терміналі виклику, і це значно ширша дія, ніж відповідь на один запит. Це не селектор OpenVPN, і на зайнятій машині він може відповісти на запити, що належать іншим юнітам. Режим спостереження ще ширший, бо продовжує обробляти запити в міру їх надходження.

Використовуйте найвужчий механізм, який працює. Для однієї служби її власний потік запиту вужчий за глобальний агент, і він тримає відповідь прив'язаною до юніта, який запитав.

Перетворити одноразовий запит на необслуговуваний глобальний агент лише тому, що повідомлення з'явилося один раз, — це шлях, яким тимчасова прикрість стає постійним дизайном. Та сама обережність стосується вимкнення юнітів сповіщення про пароль на всьому хості.

Вирішіть, а потім зафіксуйте вибір

Для необслуговуваного розгортання узгодьте джерело облікових даних, права на файл і графік оновлення з тим, хто володіє з'єднанням. Інтерактивному другому фактору може знадобитися людина або окрема ідентичність служби. Придушення запиту не створює такої аутентифікації, а видалення auth-user-pass ламає лише ту службу, якій він потрібен.

Після взаємодії подивіться на той самий примірник заради його наступної події та перевірте приватний ресурс. Якщо нічого не очікує, поверніться до стану примірника, а не запускайте кожен юніт OpenVPN на хості.

Схожі статті