Me gustaría escribir un guión que llame openvpnprimero, seguido de ssh. Al escribir el comando
sudo openvpn ~/my_connection.ovpn
en el símbolo del sistema obtengo el siguiente resultado:
...
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
Este comando está bloqueando y no se libera el shell. Para iniciar una conexión ssh después, necesito empujar el proceso openvpn a un segundo plano escribiendo Ctrl+ Zseguido de a bg.
Sin embargo, me gustaría llamar al paso de conexión openvpn y al ssh automáticamente llamando solo a mi archivo bash. ¿Cómo logro emular los Ctrl+ Zy los bgpasos en este archivo?
Intenté agregar un comando &al openvpncomando y colocarlo nohupfrente a él. Ninguno de los dos funciona.

sudo -bpara ejecutar el comando que lo sigue en segundo plano--daemonopción aún se puede usar, pero tiene razón en que la parte de ejecutarlo como root es fundamental para esta pregunta y debe reflejarse en su título . ¡Gracias por señalar esto!Respuestas:
TL; DR: uso
sudo -bo, mejor ,.openvpn [...] --daemonDado que está ejecutando
openvpn(y, menos específicamente, ya que desea ejecutar un programa como raíz en segundo plano), la información más comúnmente distribuida sobre cómo ejecutar comandos en segundo plano no aborda su situación. Tu dijiste:Tu comando es:
Según
sudola configuración predeterminada, si no ha ingresado su contraseña recientementesudoen el mismo contexto (para uso interactivo, generalmente esto significa el mismo terminal), le pedirá su contraseña. Pero si ejecuta el comando en segundo plano al agregarlo&, no se le mostrará la línea ni tendrá la oportunidad de escribirlo.[sudo] password for user:Entonces, en esta situación, ejecutar el comando, ingresar su contraseña y enviarla a un segundo plano es una forma razonable de hacerlo, para uso interactivo .
Pero no es la única forma y, como usted dice, no querrá hacerlo en un guión .
Forma 1: asegúrese de
sudotener una nueva marca de tiempo.Puede asegurarse de que
sudotiene una marca de tiempo actual cuando se utiliza para ejecutar su comando, ejecutando primero:Luego, después de eso, puedes ejecutar:
Sin embargo, generalmente es mejor evitar
&(ynohup) por completo cuando desea ejecutar un comando en segundo plano consudo. Este es especialmente el caso de las secuencias de comandos.Camino 2: uso
sudo -b. En general, esto suele ser lo que quieres.En cambio, puede ejecutarse
sudoen primer plano, pero pasar la-bbanderasudohace que el comando se ejecute en segundo plano.Esta suele ser una mejor manera, especialmente si está poniendo el comando en un script. Con
sudo -busted no obtiene el control del trabajo , pero en un script de shell, el control del trabajo está deshabilitado de forma predeterminada y, por lo general, no debería usarlo .Como
man sudoexplica:Esto funciona porque no se está ejecutando en segundo plano hasta después sudo ha recibido su contraseña (si es necesario) y se determina que está autorizado para ejecutar el comando.
Forma 3: Pero
openvpn, probablemente, solo deberías ejecutarlo--daemon.openvpnse ejecutará en segundo plano automáticamente si lo ejecuta con la--daemonopción:Pase
--daemondespués de su.opvnnombre de archivo en lugar de antes; El siguiente argumento--daemon, si lo hay, se interpreta como el nombre queopenvpndebe usar el proceso demonizado . (Do no también append&.)Si esto es apropiado o no depende de si debe producirse alguna interacción después de que
openvpnse haya ejecutado pero antes de que se demonice. Y eso depende, en parte, de lo que está configurado~/my_connection.ovpn. Pero siopenvpnno se puede demonizar de inmediato, también se romperán todas las otras formas de ejecutarlo inmediatamente en segundo plano .Por lo tanto, en cualquier situación donde se sabe que quiere
openvpna empezar ejecuta en segundo plano, y usted sabe que no va a querer traer de vuelta al primer plano, usted debe considerar seriamente el método de invocar con la--daemonopción. Esto es específico para: laopenvpnmayoría de los programas no admiten una--daemonopción, aunque muchos programas de servidor sí tienen alguna opción. (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 la
openvpnpágina del manual , especialmente en la sección sobre--daemon. Tiene mucha información útil, y solo estoy citando el primer párrafo aquí:Forma 4 : a veces es razonable ejecutar todo el script como root.
Si tiene un script que lleva a cabo múltiples acciones como root, no tiene ninguna actividad significativa que razonablemente se ejecute no como root, y nunca hay nada útil de ejecutar el script como un usuario no root, entonces el El usuario de la secuencia de comandos probablemente debería simplemente ejecutarlo como root.
Si este es el caso, entonces debe eliminar
sudode los comandos en el script. Cuando el script se ejecuta como root, no hay necesidad de hacerlosudo. (Aunque el usuario puede raíz, de forma predeterminada, ejecutar cualquier comando como cualquier usuario incluido él mismo consudoy no necesita una contraseña para hacerlo. Así que si haces casos de licencia desudoen el guión, entonces probablemente va a funcionar todavía.)Si tiene alguna instancia de
sudola secuencia de comandos que realmente se utiliza para ejecutar comandos como otro usuario que no sea root (con ), entonces aún debe mantener esas instancias.-u userSi todo el script se ejecuta como root, entonces se aplican la mayoría de las formas típicas de ejecutar comandos en segundo plano , incluyendo la adición
&y, cuando sea necesario, el uso denohup(que ya conoce). Para esto, sin embargo, aún debe considerar usaropenvpncon la--daemonopción.fuente
TL; DR Ejecutarlo en modo demonio:
openvpn --config Windscribe-Japan.ovpn --daemonPasar el nombre de archivo de configuración (.ovpn) al
openvpncomando solo funciona si no se especifican otras opciones. Si especifico la--daemonopción, entonces openvpn intenta analizar el nombre de archivo como un parámetro de opciones y arroja Error de opciones: estoy tratando de analizar "Windscribe.ovpn" como un parámetro --option pero no veo un '-' inicial .Responder:
Para evitar esto, el nombre del archivo debe especificarse con la
--configopción. Por ejemplo,openvpn --config Windscribe.ovpn --daemon. Luegotail -f /var/log/syslog, siga el syslog con , para una mayor inspección.También puede verificar el resultado antes y después de este comando curl
curl ifconfig.copara asegurarse de que la VPN esté conectada.Nota: Esto mantendrá el demonio ejecutándose incluso después de cerrar sesión en la sesión SSH.
fuente
Puedes copiar tu
Luego, solicite 'service openvpn @ confName start' para manejar todos los demonios y sudo por usted.
Ver /unix//a/366680/198666
fuente