Saltar al contenido

¿Cómo puedo ejecutar OpenVPN como root en segundo plano, en un script?

Hacemos una verificación exhaustiva cada una de las reseñas en nuestra página web con la meta de mostrarte en todo momento información certera y actual.

TL; DR: Usar sudo -b o mejor, openvpn [...] --daemon.

Ya que estas corriendo openvpn (y, menos específicamente, dado que desea ejecutar un programa como root en segundo plano), la información proporcionada con más frecuencia acerca de cómo ejecutar comandos en segundo plano no aborda su situación. Tu dijiste:

Intenté agregar un & al comando cpenvpn y colocar nohop delante de él. Ambos no funcionan.

Tu comando es:

sudo openvpn ~/my_connection.ovpn

Bajo sudoconfiguración predeterminada, si no ha introducido recientemente su contraseña para sudo en la misma terminal (o se ha desconectado y vuelto a entrar en esa terminal) entonces le pedirá su contraseña. Pero si ejecuta el comando en segundo plano agregando & entonces no se te mostrará el [sudo] password for user: línea o se le dio la oportunidad de escribirlo.

Entonces, en esta situación, ejecutar el comando, ingresar su contraseña y enviarla a segundo plano es una forma razonable de hacerlo. para uso interactivo.

Pero no es la única forma y, como dices, no querrás hacer eso. en un guión.

Camino 1: Asegurarse sudo tiene una marca de tiempo nueva.

Puede asegurarse de que sudo tiene una marca de tiempo actual cuando se usa para ejecutar su comando, ejecutando primero:

sudo -v

Luego, después de eso, puedes ejecutar:

sudo openvpn ~/my_connection.ovpn &

Sin embargo, generalmente es mejor evitar & (y nohup) en conjunto cuando desee ejecutar un comando en segundo plano con sudo. Este es especialmente el caso de las secuencias de comandos.

Camino 2: Usar sudo -b. En general, esto suele ser lo que desea.

En cambio, puedes correr sudo en primer plano, pero pasa el -b marcar así sudo hace que el comando se ejecute en segundo plano.

sudo -b openvpn ~/my_connection.ovpn

Por lo general, esta es una mejor manera, especialmente si está colocando el comando en un script. Con sudo -b no obtiene el control del trabajo, pero en un script de shell el control del trabajo está deshabilitado de forma predeterminada y normalmente no debería usarlo.

Como man sudo explica:

-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.

Esto funciona porque no se ejecuta nada en segundo plano hasta después sudo ha recibido su contraseña (si es necesario) y ha determinado que puede ejecutar el comando.

Camino 3: Pero para openvpn, probablemente deberías ejecutarlo con --daemon.

openvpn se ejecutará en segundo plano automáticamente si lo ejecuta con el --daemon opción:

sudo openvpn ~/my_connection.ovpn --daemon

Aprobar --daemon despues de ti .opvn nombre de archivo en lugar de antes; el argumento siguiente --daemon, si lo hay, se interpreta como el nombre que el demonio openvpn debe utilizar el proceso. (Hacer no también anexar &.)

Si esto es apropiado o no depende de si debe ocurrir alguna interacción después openvpn se ha ejecutado pero antes de que se demonice. Y ese depende, en parte, de lo que se establezca en ~/my_connection.ovpn. Pero Si openvpn no pudo demonizar inmediatamente, entonces todas las otras formas de ejecutarlo inmediatamente en segundo plano también se romperán.

Por lo tanto, en cualquier situación en la que sepa que desea openvpn a comienzo ejecutándose en segundo plano, y sabe que no querrá traerlo de nuevo al primer plano, debe considerar seriamente el método para invocarlo con el --daemon opción. Esto es específico para openvpn– la mayoría de los programas no son compatibles con --daemon opción, aunque muchos programas de servidor tienen alguna de estas opciones. (Sin embargo, el nombre y la sintaxis varían).

Para decidir si usar o no esta opción (y cómo desea usarla), le recomiendo que lea el openvpn página de manual, especialmente en la sección sobre --daemon. Tiene mucha información útil, y solo cito el primer párrafo aquí:

--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 [...]

Camino 4: A veces es razonable ejecutar todo el script como root.

Si tiene un script que realiza múltiples acciones como root, no tiene ninguna actividad significativa que razonablemente se ejecute no como root, y nunca hay nada útil por ejecutar el script como un usuario no root, entonces el usuario del script probablemente debería ejecutarlo como root.

Si este es el caso, debe eliminar sudo de los comandos en el script. Cuando el script se ejecuta como root, no es necesario sudo. (Aunque el usuario root puede, de forma predeterminada, ejecutar cualquier comando como cualquier usuario, incluido él mismo con sudo y no necesita una contraseña para hacerlo. Así que si usted hacer dejar instancias de sudo en el script, probablemente seguirá funcionando).

Si tiene alguna instancia de sudo en el script que realmente se utilizan para ejecutar comandos como algún otro usuario que no sea root (con -u user), entonces deberías mantener aquellos instancias.

Si todo el script se ejecuta como root, entonces se aplican la mayoría de las formas típicas de hacer que los comandos se ejecuten en segundo plano, incluida la adición & y, cuando sea necesario, el uso de nohup (que ya conoces). Sin embargo, para esto, debería considerar seriamente usar openvpn con el --daemon opción.

TL; DR Ejecútelo en modo demonio: openvpn --config Windscribe-Japan.ovpn --daemon

Pasando el nombre de archivo de configuración (.ovpn) a openvpn El comando funciona solo si no se especifican otras opciones. Si especifico --daemon opción luego openvpn intenta analizar el nombre del archivo como un parámetro de opciones y lanza Error de opciones: estoy tratando de analizar “Windscribe.ovpn” como un parámetro de opción, pero no veo un “-” inicial.

Respuesta:

Para evitar esto, el nombre del archivo debe especificarse con --config opción. Por ejemplo, openvpn --config Windscribe.ovpn --daemon. Luego siga el syslog con tail -f /var/log/syslog, para una inspección más detallada.

También puede verificar la salida antes y después de este comando curl curl ifconfig.co para asegurarse de que la VPN esté conectada.

Nota: Esto mantendrá el demonio en ejecución incluso después de cerrar la sesión SSH.

Puedes simplemente copiar tu

archivo .conf en / etc / openvpn /

Entonces pregunte ‘servicio [email protected] start ‘para manejar todas las demonizaciones y sudo por usted.

Ver https://unix.stackexchange.com/a/366680/198666

Si te gusta la informática, eres capaz de dejar una división acerca de qué le añadirías a esta división.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *