В Mac OS X 10.11 при открытии окна VPN-подключения из командной строки возникает ошибка

В Mac OS X ‹= 10.10 я могу запустить следующую команду, чтобы открыть окно VPN-подключения:

function go-vpn {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "LF VPN"
                if exists VPN then connect VPN
                repeat while (current configuration of VPN is not connected)
                    delay 1
                end repeat
        end tell
end tell
EOF
}

Это откроет окно подключения (так же, как при выборе сети «LF VPN» в раскрывающемся списке VPN). Однако в El Capitan я получаю следующую ошибку:

execution error: System Events got an error: Can’t get current configuration of service id "18E8C59B-C186-4669-9F8F-FA67D7AA6E53" of network preferences. (-1728)

Как можно было бы сделать эквивалент этого в El Capitan и как это можно отладить?

Аннотированный снимок экрана


person alberto56    schedule 05.10.2015    source источник
comment
Хм, странно, ваш скрипт отлично работает на моей установке. Не могли бы вы попробовать запустить scutil --nc list в Терминале? Это должно дать вам список доступных служб сетевого подключения и их идентификаторы, возможно, идентификаторы различаются? Для простого устранения неполадок я бы предложил просто удалить и заново создать записи VPN в Системных настройках.   -  person Asmus    schedule 06.10.2015


Ответы (4)


Вместо этого я использую scutil, и он безупречно работает в OS X 10.11.

set vpn_name to "'VPN Connection Name'"
set user_name to "my_user_name"
set otp_token to "XYZXYZABCABC"

tell application "System Events"
    set rc to do shell script "scutil --nc status " & vpn_name
    if rc starts with "Connected" then
        do shell script "scutil --nc stop " & vpn_name
    else
        set PWScript to "security find-generic-password -D \"802.1X Password\" -w -a " & user_name
        set passwd to do shell script PWScript
        -- installed through "brew install oath-toolkit"
        set OTPScript to "/usr/local/bin/oathtool --totp --base32 " & otp_token
        set otp to do shell script OTPScript
        do shell script "scutil --nc start " & vpn_name & " --user " & user_name
        delay 2
        keystroke passwd
        keystroke otp
        keystroke return
    end if
end tell
person captnswing    schedule 07.10.2015
comment
СПАСИБО! Я закомментировал материал с одноразовым паролем, чтобы мой работал. Для моего VPN не требуются данные в стиле брелока. В остальном идеально. Спасибо. - person Scott C; 05.01.2016
comment
Некоторые строки пароля могут быть проблематичными, если вы нажмете их все вместе. Я обошел это, вместо нажатия клавиши passwd, набрав по одному символу строки за раз: repeat with thisCharacter in the characters of passwd keystroke thisCharacter end repeat - person Scott C; 19.01.2017
comment
На самом деле я больше не нажимаю пароль (и токен otp). Проще скопировать все в буфер обмена через set the clipboard to passwd & otp, а затем вставить в поле, когда оно появится. - person captnswing; 20.01.2017

вместо этого используйте сценарий оболочки:

scutil --nc start "$service"    #connect
scutil --nc stop "$service"     #disconnect
person nullne co    schedule 09.10.2015

В дополнение к ответу Оливера в macOS 10.12.6 вывод scutil --nc status изменился, так что совпадение «Подключено» также соответствует «ConnectedCount». Не уверен, в какой версии macOS это изменилось.

Я сделал небольшое изменение в тесте, чтобы просто посмотреть на первую строку вывода, что действительно нужно проверить.

VPN="YOUR_VPN_NAME"
IS_CONNECTED=$(test -z `scutil --nc status "$VPN" | head -n 1 | grep Connected` && echo 0 || echo 1);
if [ $IS_CONNECTED = 1 ]; then
  scutil --nc stop "$VPN"
else
  scutil --nc start "$VPN"
fi

У меня это работает на macOs 10.12.6. Надеюсь, это поможет другим.

person adejones    schedule 15.08.2017

Проблема: Проблема заключалась в том, что я получил эту ошибку.

Can’t get «class svce» "MY VPN" of «class locc» of «class netp» of application "System Events".

System Events got an error: Can’t get service "My VPN" of current location of network preferences. (-1728)

Причина: я использую сервисы IKEv2. Кажется, что Apple Script (который я нашел по всему Интернету) не работает с этим. Вы можете найти подробности по ссылке ниже.

Решение: Тимак написал сценарий для решения этой проблемы. Я просто скачал предварительно скомпилированное приложение здесь. https://blog.timac.org/2018/0719-vpnstatus/

Если вас интересует исходный код, благодаря которому это работает, вы можете найти его на GitHub здесь: https://github.com/Timac/VPNStatus

Вы также можете углубиться в проблему, если вы относитесь к такому типу людей по этой ссылке. Это дает подробности.

Если вы просто ищете решение для автоматического подключения VPN, приложение VPNstatus сработало для меня.

person Bade Adesemowo    schedule 06.10.2020