Controlar un perfil de Tunnelblick con nome desde o terminal
Tunnelblick expón connect, state e disconnect mediante AppleScript. Chama esa interface, deixa a aplicación ao mando e dálle a cada espera un prazo.
Os scripts que precisan a VPN activa antes dunha copia de seguridade adoitan lanzar openvpn directamente. Iso abandona o perfil, o DNS e a xestión de rutas que Tunnelblick xa administra. A vía admitida é a propia interface AppleScript de Tunnelblick, que acepta peticións connect, state e disconnect para unha configuración con nome. Úsaa e deixa que a aplicación siga ao mando.
Fala coa aplicación, non con openvpn
Tunnelblick posúe o perfil OpenVPN, a selección do motor, os scripts e a integración de DNS e rutas. Un binario openvpn á parte é outra forma de lanzar, non un atallo á mesma conexión.
Chamar a interface de scripts da aplicación mantén esa propiedade intacta e fai que cada petición sexa revisable.
Os exemplos de aquí supoñen que Tunnelblick está en Applications, que unha configuración operativa se chama HQ e que os comandos se executan na sesión do usuario de Mac que iniciou sesión. Cambia o nome pola configuración exacta que teñas.
Arranca exactamente un perfil con nome
Unha petición connect nomea a configuración. Non é unha petición para conectar o que se seleccionou por última vez.
Execútaa na sesión de usuario que posúe a configuración:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Percorre os avisos habituais de inicio de sesión. macOS pode preguntar se a aplicación que chama ten permiso para controlar Tunnelblick; comproba que aplicación e que destino antes de aprobar. Unha automatización que fai clic para saltar ese diálogo anula o sentido do diálogo.
Unha petición connect volve antes de que o túnel estea levantado
A guía de scripts de Tunnelblick é explícita: connect volve antes de que a conexión remate. Un estado de saída cero significa que a petición se aceptou, non que o tráfico flúa.
Le o estado por separado:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED é un resultado de estado de conexión. Aínda non demostra que o recurso privado que precisa a túa tarefa sexa alcanzable, así que compróbao por separado antes de comezar o traballo dependente.
Outros controis da interface de scripts cobren accións máis amplas e non fan falta cando só cambia un perfil.
Espera cun prazo e despois falla
Sondar para sempre é a forma en que un script queda colgado toda a noite e bloquea a seguinte execución. Dálle á espera un prazo, un intervalo curto e un resultado de fallo explícito. Trata calquera estado distinto de CONNECTED como non listo, incluídos os de transición. Rexistra o último estado que viches para que o fallo se explique só.
Un bucle acoutado ten este aspecto:
for i in $(seq 1 30); do
state=$(osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"')
if [ "$state" = "CONNECTED" ]; then exit 0; fi
sleep 1
done
echo "tunnel did not reach CONNECTED" >&2
exit 1Trinta segundos é un exemplo, non un tempo de espera universal. Escolle un prazo a partir da ruta de autenticación que o perfil usa realmente e manteno no rexistro do fluxo de traballo.
Comproba o estado e desconecta por nome
Para deter o mesmo perfil, chama disconnect co mesmo nome. Iso mantén a petición estreita e deixa tranquilas as demais configuracións.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Mantén o nome do perfil e o controlador xuntos no rexistro do fluxo de traballo, xunto coas comprobacións de autenticación e finalización esperadas. Ese rexistro é o que fai revisable o comando seis meses despois.
O comportamento ao arrancar co equipo é outro modo. Usa a opción de inicio documentada de Tunnelblick e a configuración de credenciais que espera. Un comando executado nunha sesión de escritorio con sesión iniciada e un servizo que arranca coa máquina non comparten contexto. Non supoñas que un script que funciona mentres estás conectado se executará ao arrancar. Proba a ruta de arranque por separado, co mesmo prazo e o mesmo rexistro.