Controlarea unui profil Tunnelblick cu nume din terminal
Tunnelblick expune connect, state și disconnect prin AppleScript. Apelați acea interfață, lăsați aplicația responsabilă și dați fiecărei așteptări un termen.
Scripturile care au nevoie de VPN activ înainte de o copie de siguranță pornesc adesea openvpn direct. Asta abandonează profilul, DNS-ul și gestionarea rutelor pe care Tunnelblick le administrează deja. Calea acceptată este interfața AppleScript proprie a Tunnelblick, care acceptă cereri connect, state și disconnect pentru o configurație cu nume. Folosiți-o și lăsați aplicația responsabilă.
Vorbiți cu aplicația, nu cu openvpn
Tunnelblick deține profilul OpenVPN, alegerea motorului, scripturile și integrarea DNS și a rutelor. Un binar openvpn separat este altă configurare de pornire, nu o scurtătură către aceeași conexiune.
Apelarea interfeței de scriptare a aplicației păstrează această proprietate intactă și face fiecare cerere verificabilă.
Exemplele de aici presupun că Tunnelblick se află în Applications, că o configurație funcțională se numește HQ și că comenzile rulează în sesiunea utilizatorului Mac autentificat. Schimbați numele cu configurația exactă pe care o aveți.
Porniți exact un profil cu nume
O cerere connect numește configurația. Nu este o cerere de conectare la ceea ce a fost selectat ultima dată.
Rulați-o în sesiunea de utilizator care deține configurația:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Treceți prin solicitările obișnuite de autentificare. macOS poate întreba dacă aplicației apelante îi este permis să controleze Tunnelblick; verificați ce aplicație și ce țintă înainte de a aproba. O automatizare care face clic prin acel dialog anulează sensul dialogului.
O cerere connect revine înainte ca tunelul să fie ridicat
Ghidul de scriptare al Tunnelblick este explicit: connect revine înainte ca conexiunea să se încheie. Un cod de ieșire zero înseamnă că cererea a fost acceptată, nu că traficul curge.
Citiți starea separat:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED este un rezultat al stării conexiunii. Încă nu dovedește că resursa privată de care are nevoie sarcina dvs. este accesibilă, așa că verificați asta separat înainte de a începe lucrul dependent.
Alte controale din interfața de scriptare acoperă acțiuni mai largi și nu sunt necesare când se schimbă un singur profil.
Așteptați cu un termen, apoi eșuați
Interogarea fără sfârșit este modul în care un script atârnă toată noaptea și blochează următoarea rulare. Dați așteptării un termen, un interval scurt și un rezultat explicit de eșec. Tratați orice stare diferită de CONNECTED ca nepregătită, inclusiv cele de tranziție. Înregistrați ultima stare văzută, ca eșecul să se explice singur.
O buclă mărginită arată astfel:
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 1Treizeci de secunde sunt un exemplu, nu un timeout universal. Alegeți un termen după calea de autentificare pe care profilul o folosește efectiv și păstrați-l în registrul fluxului de lucru.
Verificați starea și deconectați după nume
Pentru a opri același profil, apelați disconnect cu același nume. Asta menține cererea îngustă și lasă celelalte configurații în pace.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Țineți numele profilului și controlerul împreună în registrul fluxului de lucru, împreună cu verificările de autentificare și finalizare așteptate. Acel registru este ceea ce face comanda verificabilă șase luni mai târziu.
Comportamentul la pornirea cu calculatorul este un alt mod. Folosiți opțiunea de pornire documentată a Tunnelblick și configurarea acreditărilor pe care o așteaptă. O comandă rulată într-o sesiune de desktop autentificată și un serviciu care pornește cu mașina nu împărtășesc context. Nu presupuneți că un script care funcționează cât timp sunteți autentificat va rula la boot. Testați calea de pornire separat, cu același termen și aceeași înregistrare.