В фразе «запусти это в фоне» скрыты два вопроса. Первый — может ли этот пользователь вообще запускать привилегированный процесс; второй — может ли сеанс продолжаться, если никто ничего не вводит в терминале. Амперсанд оболочки не отвечает ни на один, а сценарий, хранящий пароль 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 запросит позже.

Ни один из вариантов не является причиной выдавать всем команды без пароля или передавать пароль администратора в сценарий.

Предпочитайте владельца, которого можно наблюдать

Для туннеля, принадлежащего машине, используйте экземпляр службы, поддерживаемый дистрибутивом. Такой владелец даёт запуск, остановку, статус и журналы, и он переживает завершение вашего сеанса. Собирать фоновый запуск оболочки, демонизацию и цикл перезапуска друг вокруг друга — это три владельца на один туннель и никакого ясного ответа, какой из них работает.

Что бы вы ни выбрали, проверьте ресурс, для которого существует туннель. Успешный запрос запуска — это событие процесса, а не доказательство работающего соединения.

Похожие статьи