Skript som behöver VPN:et uppe före en säkerhetskopiering startar ofta openvpn direkt. Det överger profilen, DNS och routhanteringen som Tunnelblick redan sköter. Den stödda vägen är Tunnelblicks eget AppleScript-gränssnitt, som tar emot connect-, state- och disconnect-anrop för en namngiven konfiguration. Använd det och låt appen behålla ansvaret.

Tala med appen, inte med openvpn

Tunnelblick äger OpenVPN-profilen, valet av motor, skripten samt DNS- och routeintegreringen. En separat openvpn-binär är ett annat startupplägg, inte en genväg till samma anslutning.

Att anropa appens skriptgränssnitt behåller det ägarskapet intakt och gör varje begäran granskningsbar.

Exemplen här förutsätter att Tunnelblick ligger i Applications, att en fungerande konfiguration heter HQ och att kommandona körs i den inloggade Mac-användarens session. Byt namn till den exakta konfiguration du har.

Starta exakt en namngiven profil

En connect-begäran namnger konfigurationen. Det är inte en begäran att ansluta till det som valdes senast.

Kör den i den användarsession som äger konfigurationen:

osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'

Gå igenom de vanliga inloggningsfrågorna. macOS kan fråga om appen som anropar får styra Tunnelblick; kontrollera vilken app och vilket mål innan du godkänner. Automatisering som klickar sig igenom den dialogen tar bort poängen med dialogen.

En connect-begäran återvänder innan tunneln är uppe

Tunnelblicks skriptguide är tydlig: connect återvänder innan anslutningen är klar. En noll-exitstatus betyder att begäran accepterades, inte att trafik flödar.

Läs av statusen separat:

osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'

CONNECTED är ett resultat av anslutningsstatus. Det bevisar ännu inte att den privata resurs som jobbet behöver är nåbar, så kontrollera det separat innan du startar beroende arbete.

Andra kontroller i skriptgränssnittet täcker bredare åtgärder och behövs inte när bara en profil ändras.

Vänta med en tidsgräns och misslyckas sedan

Evig pollning är hur ett skript hänger hela natten och blockerar nästa körning. Ge väntan en tidsgräns, ett kort intervall och ett tydligt misslyckande. Behandla varje status utom CONNECTED som inte klar, även övergångstillstånden. Logga den senast sedda statusen så att felet förklarar sig självt.

En begränsad loop ser ut så här:

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

Trettio sekunder är ett exempel, inte en universell timeout. Välj en tidsgräns utifrån den autentiseringsväg profilen faktiskt använder och håll den i arbetsflödets protokoll.

Kontrollera status och koppla från vid namn

För att stoppa samma profil, anropa disconnect med samma namn. Det håller begäran snäv och lämnar andra konfigurationer i fred.

osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'

Håll profilnamnet och kontrollen tillsammans i arbetsflödets protokoll, tillsammans med de förväntade autentiserings- och slutförandekontrollerna. Den posten är det som gör kommandot granskningsbart ett halvår senare.

Beteende vid start med datorn är ett annat läge. Använd Tunnelblicks dokumenterade startalternativ och den inloggningsuppsättning det förväntar sig. Ett kommando som körs i en inloggad skrivbordssession och en tjänst som startar med maskinen delar ingen kontext. Anta inte att ett skript som fungerar medan du är inloggad också körs vid start. Testa startvägen för sig, med samma tidsgräns och loggning.

Relaterade artiklar