Sterowanie nazwanym profilem Tunnelblick z terminala
Tunnelblick udostępnia connect, state i disconnect przez AppleScript. Wywołaj ten interfejs, pozwól aplikacji pozostać odpowiedzialną i daj każdemu oczekiwaniu termin.
Skrypty, które przed kopią zapasową potrzebują działającego VPN, często uruchamiają openvpn bezpośrednio. To porzuca profil, DNS i obsługę tras, którymi Tunnelblick już zarządza. Wspierana droga to własny interfejs AppleScript Tunnelblicka, który przyjmuje żądania connect, state i disconnect dla nazwanej konfiguracji. Używaj go i pozwól aplikacji pozostać odpowiedzialną.
Rozmawiaj z aplikacją, nie z openvpn
Tunnelblick posiada profil OpenVPN, wybór silnika, skrypty oraz integrację DNS i tras. Osobny plik binarny openvpn to inny sposób uruchamiania, a nie skrót do tego samego połączenia.
Wywołanie interfejsu skryptowego aplikacji zachowuje tę własność nietkniętą i czyni każde żądanie możliwym do sprawdzenia.
Przykłady zakładają, że Tunnelblick znajduje się w Applications, działająca konfiguracja nazywa się HQ, a polecenia działają w sesji zalogowanego użytkownika Maca. Zmień nazwę na dokładną konfigurację, którą masz.
Uruchom dokładnie jeden nazwany profil
Żądanie connect nazywa konfigurację. To nie jest żądanie połączenia z tym, co zostało wybrane ostatnio.
Uruchom je w sesji użytkownika, który posiada konfigurację:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Przejdź przez zwykłe monity logowania. macOS może zapytać, czy wywołująca aplikacja może kontrolować Tunnelblick; sprawdź, która aplikacja i który cel, zanim zatwierdzisz. Automatyzacja, która klika przez ten dialog, niweczy jego sens.
Żądanie connect wraca, zanim tunel zostanie podniesiony
Przewodnik po skryptach Tunnelblicka jest jednoznaczny: connect wraca przed zakończeniem połączenia. Zerowy kod wyjścia oznacza, że żądanie zostało przyjęte, a nie że ruch płynie.
Odczytaj stan osobno:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED to wynik stanu połączenia. Wciąż nie dowodzi, że prywatny zasób potrzebny twojemu zadaniu jest osiągalny, więc sprawdź to osobno przed rozpoczęciem pracy zależnej.
Inne elementy sterujące interfejsu skryptowego obejmują szersze działania i nie są potrzebne, gdy zmienia się tylko jeden profil.
Czekaj z terminem, potem zawiedź
Nieskończone odpytywanie to sposób, w jaki skrypt wisi całą noc i blokuje następne uruchomienie. Daj oczekiwaniu termin, krótki interwał i wyraźny wynik niepowodzenia. Każdy stan inny niż CONNECTED traktuj jako niegotowy, w tym przejściowe. Zapisuj ostatnio widziany stan, aby niepowodzenie samo się tłumaczyło.
Ograniczona pętla wygląda tak:
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 1Trzydzieści sekund to przykład, nie uniwersalny limit czasu. Wybierz termin na podstawie ścieżki uwierzytelniania, której profil faktycznie używa, i trzymaj go w zapisie przepływu pracy.
Sprawdź stan i rozłącz według nazwy
Aby zatrzymać ten sam profil, wywołaj disconnect z tą samą nazwą. To utrzymuje żądanie wąskie i pozostawia inne konfiguracje w spokoju.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Trzymaj nazwę profilu i kontroler razem w zapisie przepływu pracy, wraz z oczekiwanymi kontrolami uwierzytelniania i zakończenia. To ten zapis czyni polecenie sprawdzalnym pół roku później.
Zachowanie przy starcie z komputerem to inny tryb. Użyj udokumentowanej opcji startu Tunnelblicka i konfiguracji poświadczeń, której ona oczekuje. Polecenie uruchomione w zalogowanej sesji pulpitu i usługa startująca z maszyną nie dzielą kontekstu. Nie zakładaj, że skrypt działający podczas twojego zalogowania będzie działał przy rozruchu. Przetestuj ścieżkę startu osobno, z tym samym terminem i logowaniem.