Skript som trenger VPN-et oppe før en sikkerhetskopi, starter ofte openvpn direkte. Det gir slipp på profilen, DNS og rutebehandlingen som Tunnelblick allerede håndterer. Den støttede veien er Tunnelblicks eget AppleScript-grensesnitt, som tar imot connect-, state- og disconnect-forespørsler for en navngitt konfigurasjon. Bruk det, og la applikasjonen beholde kontrollen.

Snakk med applikasjonen, ikke med openvpn

Tunnelblick eier OpenVPN-profilen, motorvalget, skriptene og DNS- og ruteintegrasjonen. En separat openvpn-binærfil er et annet oppstartsopplegg, ikke en snarvei til den samme forbindelsen.

Å kalle applikasjonens skriptgrensesnitt holder det eierskapet intakt og gjør hver forespørsel etterprøvbar.

Eksemplene her antar at Tunnelblick ligger i Applications, at en fungerende konfigurasjon heter HQ, og at kommandoene kjøres i økten til den påloggede Mac-brukeren. Bytt 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 påloggingsspørsmålene. macOS kan spørre om applikasjonen som kaller, har lov til å styre Tunnelblick; sjekk hvilken applikasjon og hvilket mål før du godkjenner. Automatisering som klikker seg forbi den dialogen, gjør dialogen meningsløs.

En connect-forespørsel returnerer før tunnelen er oppe

Skriptveiledningen til Tunnelblick er tydelig: connect returnerer før forbindelsen er ferdig. En utgangsstatus på null 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 forbindelsestilstand. Det beviser ennå ikke at den private ressursen jobben din trenger, er tilgjengelig, 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

Endeløs 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 1

Tretti sekunder er et eksempel, ikke en universell tidsavbrudd. Velg en frist ut fra autentiseringsveien profilen faktisk bruker, og hold den i arbeidsflytens journal.

Sjekk tilstand og koble fra ved navn

For å stoppe den samme profilen, kall disconnect med det samme navnet. 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 kontrolleren sammen i arbeidsflytens journal, sammen med de forventede autentiserings- og fullføringssjekkene. Den journalen er det som gjør kommandoen etterprøvbar et halvt år senere.

Oppførsel ved oppstart med datamaskinen er en annen modus. Bruk det dokumenterte oppstartsvalget til Tunnelblick og oppsettet av påloggingsinformasjon som det forventer. En kommando som kjøres i en pålogget skrivebordsøkt, og en tjeneste som starter med maskinen, deler ikke kontekst. Ikke anta at et skript som virker mens du er pålogget, også kjører ved oppstart. Test oppstartsveien for seg, med samme frist og logging.

Relaterte artikler