sudo, &, -b чи --daemon: як перевести клієнт OpenVPN у фон
Амперсанд звільняє термінал, а не вхід. Порівняйте sudo -b, --daemon і екземпляр служби за тим, кому належить процес і хто відповідає на запити.
У фразі «запусти це у фоні» приховані два питання. Перше — чи може цей користувач узагалі запускати привілейований процес; друге — чи може сеанс тривати, коли ніхто нічого не вводить у терміналі. Амперсанд оболонки не відповідає на жодне, а сценарій, що зберігає пароль sudo у змінній, погано відповідає на перше й залишає друге недоторканим. Розділіть їх, і варіанти стане легко порівняти.
Порівнюйте три варіанти за власником, а не за зручністю.
Три способи залишити термінал, три різні власники
Якщо додати амперсанд до команди, оболонка запустить її як фонове завдання, і завдання далі належить цій оболонці. sudo може запитати ще до запуску програми, а OpenVPN може потім запитати парольну фразу ключа або вхід. Запуск у фоні команди, що очікує введення, створює процес, який чекає на термінал, за яким ніхто не стежить. Термінал звільняється; взаємодія — ні.
Це найдешевший варіант і той, що відмовляє найзаплутаніше, бо запит з'являється там, звідки оператор уже пішов.
sudo -b — не обробник облікових даних
sudo -b запускає команду у фоні з погляду самого sudo, що звучить як відсутня функція, але нею не є. Згідно з посібником sudo, інтерактивні команди в цьому режимі зазвичай поводяться неправильно, а керування завданнями оболонки не може керувати створеними нею процесами. Він переміщує процес, не даючи йому способу відповідати на питання. Ніщо в ньому не забезпечує парольну фразу закритого ключа чи вхід на шлюз.
Якщо з'єднанню потрібна взаємодія, рішення — підтримувана неінтерактивна схема автентифікації, а не інший спосіб запустити той самий запит.
--daemon змінює програму, а не вхід
--daemon просить сам OpenVPN від'єднатися після ініціалізації. Посібник версії 2.6 зазначає, що перенаправлення syslog відбувається під час розбору параметра, хоча від'єднання відбувається пізніше, тож повідомлення можуть перестати з'являтися в терміналі раніше, ніж очікувалося. Тиша після цієї точки нічого не доводить про тунель. Додайте явний --log або --log-append щоб вивід потрапляв туди, де ви можете його прочитати.
Режим демона також назавжди прибирає консоль. Захищеному закритому ключу в цьому режимі потрібен askpass , а облікові дані, введені в консолі, разом з параметрами кешування можуть залишити подальшу повторну автентифікацію без місця для запиту. Перевірте модель автентифікації з встановленою версією, перш ніж припускати, що фоновий запуск переживе перше оновлення ключа.
Що дає і чого не дає перевірка sudo
sudo -v перевіряє або оновлює кешовані локальні облікові дані й автентифікується, якщо цього вимагає політика. Він не запускає OpenVPN, не автентифікується на шлюзі й не гарантує, що подальша команда в сценарії буде дозволена. sudo -n означає протилежне: не питай, а падай. Це робить локальну відмову авторизації явною, що корисно, і нічого не каже про те, що OpenVPN запитає пізніше.
Жоден із варіантів не є причиною видавати всім команди без пароля або передавати пароль адміністратора в сценарій.
Надавайте перевагу власнику, якого можна спостерігати
Для тунелю, що належить машині, використовуйте екземпляр служби, який підтримує дистрибутив. Такий власник дає запуск, зупинку, статус і журнали, і він переживає завершення вашого сеансу. Складати фоновий запуск оболонки, демонізацію й цикл перезапуску одне навколо одного — це три власники на один тунель і жодної ясної відповіді, який із них працює.
Щоб ви не обрали, перевірте ресурс, для якого існує тунель. Успішний запит на запуск — це подія процесу, а не доказ працюючого з'єднання.