Controlar um perfil Tunnelblick com nome a partir do terminal
O Tunnelblick expõe connect, state e disconnect via AppleScript. Chame essa interface, deixe a aplicação no comando e dê a cada espera um prazo.
Scripts que precisam da VPN ativa antes de um backup muitas vezes iniciam o openvpn diretamente. Isso abandona o perfil, o DNS e o tratamento de rotas que o Tunnelblick já administra. O caminho suportado é a própria interface AppleScript do Tunnelblick, que aceita pedidos connect, state e disconnect para uma configuração com nome. Use-a e deixe a aplicação no comando.
Fale com a aplicação, não com o openvpn
O Tunnelblick detém o perfil OpenVPN, a escolha do motor, os scripts e a integração de DNS e rotas. Um binário openvpn separado é outro arranjo de arranque, não um atalho para a mesma ligação.
Chamar a interface de scripts da aplicação mantém essa propriedade intacta e torna cada pedido verificável.
Os exemplos aqui assumem que o Tunnelblick está em Applications, que uma configuração funcional se chama HQ e que os comandos correm na sessão do utilizador de Mac com sessão iniciada. Mude o nome para a configuração exata que tem.
Arranque exatamente um perfil com nome
Um pedido connect nomeia a configuração. Não é um pedido para ligar ao que foi selecionado por último.
Execute-o na sessão de utilizador que detém a configuração:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Percorra os avisos habituais de início de sessão. O macOS pode perguntar se a aplicação que chama pode controlar o Tunnelblick; verifique qual aplicação e qual alvo antes de aprovar. Uma automatização que clica por esse diálogo anula o sentido do diálogo.
Um pedido connect volta antes de o túnel estar montado
O guia de scripts do Tunnelblick é explícito: connect volta antes de a ligação terminar. Um estado de saída zero significa que o pedido foi aceite, não que o tráfego flui.
Leia o estado em separado:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED é um resultado de estado de ligação. Ainda não prova que o recurso privado de que a sua tarefa precisa esteja acessível, por isso verifique isso em separado antes de começar trabalho dependente.
Outros controlos da interface de scripts cobrem ações mais amplas e não são necessários quando só um perfil muda.
Espere com um prazo, depois falhe
Sondar para sempre é a forma de um script ficar pendurado toda a noite e bloquear a execução seguinte. Dê à espera um prazo, um intervalo curto e um resultado de falha explícito. Trate qualquer estado diferente de CONNECTED como não pronto, incluindo os de transição. Registe o último estado que viu para que a falha se explique sozinha.
Um ciclo limitado tem este aspeto:
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 são um exemplo, não um tempo limite universal. Escolha um prazo a partir do caminho de autenticação que o perfil usa realmente e mantenha-o no registo do fluxo de trabalho.
Verifique o estado e desligue pelo nome
Para parar o mesmo perfil, chame disconnect com o mesmo nome. Isso mantém o pedido estreito e deixa as outras configurações em paz.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Mantenha o nome do perfil e o controlador juntos no registo do fluxo de trabalho, com as verificações de autenticação e conclusão esperadas. É esse registo que torna o comando verificável seis meses depois.
O comportamento ao arrancar com o computador é outro modo. Use a opção de arranque documentada do Tunnelblick e a configuração de credenciais que ela espera. Um comando executado numa sessão de ambiente de trabalho com sessão iniciada e um serviço que arranca com a máquina não partilham contexto. Não assuma que um script que funciona enquanto está ligado será executado no arranque. Teste o caminho de arranque à parte, com o mesmo prazo e o mesmo registo.