Как я могу выполнить OpenVPN как корень в фоновом режиме в сценарии?

Я хотел бы записать сценарий, который звонит openvpn во-первых, сопровождаемый ssh. При вводе команды

sudo openvpn ~/my_connection.ovpn

в командной строке я получаю следующий вывод:

...
Wed Jan  4 21:04:35 2017 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
Wed Jan  4 21:04:35 2017 /sbin/ip link set dev tun0 up mtu 1500
Wed Jan  4 21:04:35 2017 /sbin/ip addr add dev tun0 local IP_FOO peer IP_FOO
Wed Jan  4 21:04:35 2017 Initialization Sequence Completed

Эта команда блокируется, и оболочка не выпущена. Для запуска соединения SSH впоследствии, я должен отодвинуть процесс openvpn на задний план путем ввода Ctrl+Z, сопровождаемого a bg.

Однако я хотел бы назвать openvpn шаг соединения и ssh автоматически путем вызова просто моего файла удара. Как мне удается эмулировать Ctrl+Z и bg шаги в этом файле?

Я попытался добавить a & к openvpn команда и поместить nohup перед ним. Никакой работы.

21
задан 8 January 2017 в 14:37

3 ответа

TL; DR: использовать sudo -b или, лучше, openvpn [...] --daemon.

Так как Вы работаете openvpn (и, меньше а именно, так как Вы хотите запустить программу как корень в фоновом режиме), обычно распределенная информация о том, как к командам выполнения в фоновом режиме не обращается к Вашей ситуации. Вы сказали:

Я попытался добавить a и к команде cpenvpn и поместить nohop перед ним. Оба не работают.

Ваша команда:

sudo openvpn ~/my_connection.ovpn

Под sudoконфигурация по умолчанию, если Вы недавно не ввели свой пароль для sudo в том же контексте (для интерактивного использования, обычно это означает тот же терминал) затем это попросит Ваш пароль. Но если Вы выполняете команду в фоновом режиме путем добавления & затем Вас не покажут [sudo] password for user: строка или, учитывая возможность ввести его.

Таким образом в этой ситуации, выполняя команду, вводя Ваш пароль, и отправляя его в фон впоследствии разумный способ сделать это, для интерактивного использования.

Но это не единственный путь и, как Вы говорите, Вы не захотите делать это в сценарии.

Путь 1: Удостовериться sudo имеет новую метку времени.

Можно гарантировать это sudo имеет текущую метку времени, когда она используется для выполнения команды первым выполнением:

sudo -v

Затем после этого можно работать:

sudo openvpn ~/my_connection.ovpn &

Однако обычно лучше избежать &nohup) в целом, когда Вы хотите выполнить команду в фоновом режиме с sudo. Это в особенности имеет место для сценариев.

Путь 2: использовать sudo -b. В целом это обычно, что Вы хотите.

Вместо этого можно работать sudo самостоятельно на переднем плане, но передаче -b флаг так sudo заставляет команду быть выполненной в фоновом режиме.

sudo -b openvpn ~/my_connection.ovpn

Это обычно - лучший путь, особенно при помещении команды в сценарий. С sudo -b Вы не получаете управление заданиями, но в сценарии оболочки управление заданиями отключено по умолчанию, и Вы не должны обычно использовать его.

Как man sudo объясняет:

     -b, --background
                 Run the given command in the background.  Note that it is not
                 possible to use shell job control to manipulate background
                 processes started by sudo.  Most interactive commands will
                 fail to work properly in background mode.

Это работает, потому что ничто не работает в фоновом режиме, пока sudo не получил Ваш пароль (при необходимости) и решил, что Вам разрешают выполнить команду.

Путь 3: но для openvpn, необходимо, вероятно, просто выполнить его с --daemon.

openvpn будет работать в фоновом режиме автоматически, если Вы выполните его с --daemon опция:

sudo openvpn ~/my_connection.ovpn --daemon

Передача --daemon после Вашего .opvn имя файла, а не прежде; аргумент после --daemon, если таковые имеются, интерпретируется как имя что daemonized openvpn процесс должен использовать. (Также не добавляйте &.)

Является ли это соответствующим, зависит от того, должно ли любое взаимодействие произойти после openvpn был выполнен, но перед ним daemonizes. И это зависит, частично, на том, что настраивается в ~/my_connection.ovpn. Но если openvpn не мог сразу daemonize, затем все другие способы непосредственного выполнения, оно в фоновом режиме повредится, также.

Поэтому в любой ситуации, где Вы знаете, Вы хотите openvpn чтобы начать работать в фоновом режиме, и Вы знаете, что не захотите возвращать его в передний план, необходимо сильно рассмотреть метод вызова его с --daemon опция. Это характерно для openvpn- большинство программ не поддерживает a --daemon опция, хотя много программ сервера действительно имеют некоторую такую опцию. (Имя и синтаксис варьируются, как бы то ни было.)

Чтобы решить, использовать ли эту опцию (и как Вы хотите использовать ее), я рекомендую читать openvpn страница руководства, особенно в разделе по --daemon. Это имеет большую полезную информацию, и я только заключаю первый абзац в кавычки здесь:

       --daemon [progname]
              Become  a  daemon  after  all   initialization   functions   are
              completed.   This option will cause all message and error output
              to be sent to  the  syslog  file  (such  as  /var/log/messages),
              except  for  the  output of scripts and ifconfig commands, which
              will go to /dev/null unless otherwise  redirected.   The  syslog
              redirection  occurs  immediately  at  the point that --daemon is
              parsed on the command line even though the  daemonization  point
              occurs  later.   If one of the --log options is present, it will
              supercede syslog redirection.

              The optional progname parameter [...]

Путь 4: Иногда разумно запустить целый скрипт как корень.

Если у Вас есть сценарий, который выполняет несколько действий как корень, он не имеет никакой значительной активности, которая была бы обоснованно выполнена не как корень, и никогда нет ничего полезного для прибытия из запущения скрипта как некорневой пользователь, то пользователь сценария должен, вероятно, просто выполнить его как корень.

Если это верно, затем необходимо удалить sudo от команд в сценарии. Когда выполнения сценария как корень, нет никакой потребности в sudo. (Хотя пользователь root может, по умолчанию, выполнить любую команду как любой пользователь включая себя с sudo и не нуждается в пароле, чтобы сделать так. Таким образом, если Вы действительно оставляете экземпляры sudo в сценарии затем это будет, вероятно, все еще работать.)

Если у Вас есть какие-либо экземпляры sudo в сценарии, которые на самом деле привыкли к командам выполнения как некоторый другой пользователь, чем корень (с -u user), затем необходимо все еще сохранить те экземпляры.

Если целый скрипт запускается как корень, то большинство типичных способов сделать команды выполненными в фоновом режиме применяется, включая добавление & и, при необходимости, использование nohup (который Вы уже знаете о). Для этого, тем не менее, необходимо все еще сильно рассмотреть использование openvpn с --daemon опция.

32
ответ дан 23 November 2019 в 01:42

TL; DR Запустить его в режиме демона: openvpn --config Windscribe-Japan.ovpn --daemon

Передача имени файла конфигурации (.ovpn) команде openvpn работает, только если не указаны другие параметры. Если я укажу опцию --daemon, то openvpn пытается проанализировать имя файла как параметр options и выдает ошибку Options: я пытаюсь проанализировать «Windscribe.ovpn» как параметр --option, но я не вижу ведущий '-' .

Ответ:

Чтобы избежать этого, необходимо указать имя файла с опцией --config. Например, openvpn --config Windscribe.ovpn --daemon. Затем добавьте системный журнал в tail -f /var/log/syslog для дальнейшей проверки.

Вы также можете проверить до и после вывода этой команды curl curl ifconfig.co, чтобы убедиться, что VPN подключен.

Примечание. Демон будет работать даже после выхода из сеанса SSH.

2
ответ дан 23 November 2019 в 01:42

Вы можете просто скопировать свой файл

.conf в / etc / openvpn /

Затем попросить 'service openvpn @ confName start' обработать все демонизаторы и sudo для вас.

См. https://unix.stackexchange.com/a/366680/198666

.
0
ответ дан 23 November 2019 в 01:42

Другие вопросы по тегам:

Похожие вопросы: