Styr en navngitt Tunnelblick-profil fra terminalen
Tunnelblick tilbyr connect, state og disconnect via AppleScript. Kall det grensesnittet, la appen beholde ansvaret og gi hver venting en frist.
Skript som trenger VPN oppe før en sikkerhetskopi, starter ofte openvpn direkte. Det forlater profilen, DNS og rutehåndteringen som Tunnelblick allerede styrer. Den støttede veien er Tunnelblicks eget AppleScript-grensesnitt, som godtar connect-, state- og disconnect-forespørsler for en navngitt konfigurasjon. Bruk det, og la appen beholde ansvaret.
Snakk med appen, ikke med openvpn
Tunnelblick eier OpenVPN-profilen, valget av motor, skriptene og DNS- og ruteintegrasjonen. En egen openvpn-binær er et annet oppstartsarrangement, ikke en snarvei til samme tilkobling.
Å kalle appens skriptgrensesnitt holder det eierskapet intakt og gjør hver forespørsel etterprøvbar.
Eksemplene her forutsetter at Tunnelblick ligger i Applications, at en fungerende konfigurasjon heter HQ, og at kommandoene kjøres i økten til den innloggede Mac-brukeren. Endre navnet til den nøyaktige konfigurasjonen du har.
Start nøyaktig én navngitt profil
En connect-forespørsel navngir konfigurasjonen. Det er ikke en forespørsel om å koble til det som ble valgt sist.
Kjør den i brukerøkten som eier konfigurasjonen:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Gå gjennom de vanlige innloggingsspørsmålene. macOS kan spørre om appen som kaller, får styre Tunnelblick; sjekk hvilken app og hvilket mål før du godkjenner. Automatisering som klikker seg gjennom dialogen, gjør dialogen meningsløs.
En connect-forespørsel kommer tilbake før tunnelen er oppe
Tunnelblicks skriptveiledning er tydelig: connect kommer tilbake før tilkoblingen er ferdig. En null-utgangsstatus betyr at forespørselen ble godtatt, ikke at trafikken flyter.
Les tilstanden separat:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED er et resultat av tilkoblingstilstand. Det beviser ennå ikke at den private ressursen jobben din trenger, er nåbar, så sjekk det separat før du starter avhengig arbeid.
Andre kontroller i skriptgrensesnittet dekker bredere handlinger og trengs ikke når bare én profil endres.
Vent med en frist, og feil deretter
Evig spørring er måten et skript henger hele natten og blokkerer neste kjøring. Gi ventingen en frist, et kort intervall og et tydelig feilutfall. Behandle enhver tilstand utenom CONNECTED som ikke klar, også overgangstilstandene. Logg den siste tilstanden du så, slik at feilen forklarer seg selv.
En avgrenset løkke ser slik ut:
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 1Tretti sekunder er et eksempel, ikke en universell tidsgrense. Velg en frist ut fra autentiseringsveien profilen faktisk bruker, og hold den i arbeidsflytens oppføring.
Sjekk tilstand og koble fra ved navn
For å stoppe samme profil, kall disconnect med samme navn. Det holder forespørselen smal og lar andre konfigurasjoner være i fred.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Hold profilnavnet og kontrolløren sammen i arbeidsflytens oppføring, sammen med de forventede autentiserings- og fullføringssjekkene. Den oppføringen er det som gjør kommandoen etterprøvbar et halvt år senere.
Oppførsel ved oppstart med maskinen er en annen modus. Bruk Tunnelblicks dokumenterte oppstartsalternativ og oppsettet av påloggingsinformasjon som det forventer. En kommando som kjøres i en innlogget skrivebordsøkt, og en tjeneste som starter med maskinen, deler ikke kontekst. Ikke anta at et skript som virker mens du er innlogget, også kjører ved oppstart. Test oppstartsveien for seg, med samme frist og logging.