Управление на именуван профил на Tunnelblick от терминала
Tunnelblick предоставя connect, state и disconnect чрез AppleScript. Извикайте този интерфейс, оставете приложението начело и дайте на всяко изчакване краен срок.
Скриптовете, на които им трябва работещ VPN преди резервно копие, често стартират openvpn директно. Така се изоставят профилът, DNS и обработката на маршрути, които Tunnelblick вече управлява. Поддържаният път е собственият интерфейс AppleScript на Tunnelblick, който приема заявки connect, state и disconnect за именувана конфигурация. Използвайте го и оставете приложението да отговаря за всичко.
Говорете с приложението, не с openvpn
Tunnelblick притежава профила OpenVPN, избора на двигател, скриптовете и интеграцията с DNS и маршрутите. Отделен изпълним файл openvpn е друга схема на стартиране, а не пряк път към същата връзка.
Извикването на скриптовия интерфейс на приложението запазва тази собственост непокътната и прави всяка заявка проверима.
Примерите тук предполагат, че Tunnelblick е в Applications, работната конфигурация се казва HQ и командите се изпълняват в сесията на влезлия потребител на Mac. Сменете името с точната конфигурация, която имате.
Стартирайте точно един именуван профил
Заявката connect назовава конфигурацията. Това не е заявка за свързване с последно избраното.
Изпълнете я в потребителската сесия, която притежава конфигурацията:
osascript -e 'tell application "/Applications/Tunnelblick.app" to connect "HQ"'Преминете през обичайните подкани за вход. macOS може да попита дали на извикващото приложение е разрешено да управлява Tunnelblick; проверете кое приложение и коя цел, преди да одобрите. Автоматизация, която прескача този диалог, обезсмисля диалога.
Заявката connect се връща преди тунелът да е вдигнат
Ръководството за скриптове на Tunnelblick е категорично: connect се връща преди връзката да завърши. Нулев код на изход означава, че заявката е приета, а не че трафикът тече.
Прочетете състоянието отделно:
osascript -e 'tell application "/Applications/Tunnelblick.app" to get state of first configuration where name = "HQ"'CONNECTED е резултат за състоянието на връзката. Той все още не доказва, че частният ресурс, от който се нуждае задачата ви, е достъпен, затова проверете това отделно, преди да започнете зависима работа.
Другите контроли в скриптовия интерфейс покриват по-широки действия и не са нужни, когато се променя само един профил.
Изчакайте с краен срок, после се провалете
Безкрайното запитване е начинът, по който скрипт виси цяла нощ и блокира следващото изпълнение. Дайте на изчакването краен срок, кратък интервал и ясен изход при неуспех. Приемайте всяко състояние, различно от CONNECTED, като неготово, включително преходните. Записвайте последното видяно състояние, за да се обясни провалът сам.
Ограничен цикъл изглежда така:
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Тридесет секунди е пример, а не универсален таймаут. Изберете краен срок според пътя за удостоверяване, който профилът действително използва, и го пазете в записа на работния процес.
Проверете състоянието и прекъснете по име
За да спрете същия профил, извикайте disconnect със същото име. Така заявката остава тясна и другите конфигурации не се засягат.
osascript -e 'tell application "/Applications/Tunnelblick.app" to disconnect "HQ"'Пазете името на профила и контролера заедно в записа на работния процес, заедно с очакваните проверки за удостоверяване и завършване. Именно този запис прави командата проверима след шест месеца.
Поведението при стартиране с компютъра е друг режим. Използвайте документираната опция за стартиране на Tunnelblick и настройката на идентификационните данни, която тя очаква. Команда, изпълнена в сесия на влязъл потребител на работния плот, и услуга, която стартира с машината, не споделят контекст. Не предполагайте, че скрипт, който работи, докато сте влезли, ще работи при зареждане. Тествайте пътя за стартиране отделно, със същия краен срок и журнал.