Ein benanntes Tunnelblick-Profil vom Terminal aus steuern
Tunnelblick stellt connect, state und disconnect über AppleScript bereit. Rufen Sie diese Schnittstelle auf, lassen Sie die App zuständig bleiben und geben Sie jedem Warten eine Frist.
Skripte, die vor einer Sicherung ein aktives VPN brauchen, starten oft openvpn direkt. Das lässt Profil, DNS und Routenverwaltung liegen, die Tunnelblick bereits übernimmt. Der unterstützte Weg ist Tunnelblicks eigene AppleScript-Schnittstelle, die connect-, state- und disconnect-Anfragen für eine benannte Konfiguration annimmt. Nutzen Sie sie und lassen Sie die Anwendung zuständig bleiben.
Sprechen Sie mit der App, nicht mit openvpn
Tunnelblick besitzt das OpenVPN-Profil, die Wahl der Engine, die Skripte sowie die DNS- und Routenintegration. Eine separate openvpn-Binärdatei ist eine andere Startvariante, keine Abkürzung zur selben Verbindung.
Der Aufruf der Skriptschnittstelle der Anwendung erhält diese Zuständigkeit und macht jede Anfrage nachvollziehbar.
Die Beispiele hier gehen davon aus, dass Tunnelblick in Applications liegt, dass eine funktionierende Konfiguration HQ heißt und dass die Befehle in der Sitzung des angemeldeten Mac-Benutzers laufen. Ändern Sie den Namen auf die genaue Konfiguration, die Sie haben.
Starten Sie genau ein benanntes Profil
Eine connect-Anfrage benennt die Konfiguration. Sie ist keine Anfrage, das zuletzt Ausgewählte zu verbinden.
Führen Sie sie in der Benutzersitzung aus, der die Konfiguration gehört:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Gehen Sie die üblichen Anmeldeabfragen durch. macOS fragt möglicherweise, ob die aufrufende App Tunnelblick steuern darf; prüfen Sie, welche App und welches Ziel, bevor Sie zustimmen. Automatisierung, die diesen Dialog wegklickt, hebt den Sinn des Dialogs auf.
Eine connect-Anfrage kehrt zurück, bevor der Tunnel steht
Tunnelblicks Skriptleitfaden ist eindeutig: connect kehrt zurück, bevor die Verbindung fertig ist. Ein Exit-Status von null heißt, dass die Anfrage angenommen wurde, nicht dass Daten fließen.
Lesen Sie den Zustand getrennt aus:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED ist ein Ergebnis des Verbindungszustands. Es belegt noch nicht, dass die private Ressource, die Ihr Auftrag braucht, erreichbar ist; prüfen Sie das gesondert, bevor Sie abhängige Arbeit starten.
Andere Steuerungen der Skriptschnittstelle decken breitere Aktionen ab und werden nicht gebraucht, wenn sich nur ein Profil ändert.
Warten Sie mit Frist und scheitern Sie dann
Endloses Abfragen ist der Weg, auf dem ein Skript über Nacht hängt und den nächsten Lauf blockiert. Geben Sie dem Warten eine Frist, ein kurzes Intervall und ein ausdrückliches Scheitern. Behandeln Sie jeden Zustand außer CONNECTED als nicht bereit, auch die Übergangszustände. Protokollieren Sie den zuletzt gesehenen Zustand, damit das Scheitern sich selbst erklärt.
Eine begrenzte Schleife sieht so aus:
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 1Dreißig Sekunden sind ein Beispiel, kein allgemeiner Timeout. Wählen Sie eine Frist anhand des Authentifizierungswegs, den das Profil tatsächlich nutzt, und halten Sie sie im Ablaufprotokoll fest.
Zustand prüfen und nach Namen trennen
Um dasselbe Profil zu stoppen, rufen Sie disconnect mit demselben Namen auf. Das hält die Anfrage eng und lässt andere Konfigurationen unberührt.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Halten Sie Profilnamen und Steuerung zusammen im Protokoll des Ablaufs fest, zusammen mit den erwarteten Authentifizierungs- und Abschlussprüfungen. Dieser Eintrag macht den Befehl auch in einem halben Jahr nachvollziehbar.
Verhalten beim Start mit dem Rechner ist ein anderer Modus. Nutzen Sie Tunnelblicks dokumentierte Startoption und die Anmeldedaten-Einrichtung, die sie erwartet. Ein Befehl in einer angemeldeten Desktop-Sitzung und ein Dienst, der mit dem Rechner startet, teilen keinen Kontext. Gehen Sie nicht davon aus, dass ein Skript, das bei Ihrer Anmeldung läuft, auch beim Start läuft. Testen Sie den Startweg eigens, mit derselben Frist und Protokollierung.