46

У меня есть две конфигурации VPN на моем Mac, и я хотел бы иметь возможность запускать их с консоли, когда я ssh на мою машину.

Я нашел команду networksetup которая позволяет мне настраивать соединения, но, насколько я могу судить, на самом деле не запускает.

Используя Льва.

4 ответа4

53

Вы также можете, по крайней мере, со Льва 1, использовать команду scutil.

Например, если у меня есть VPN-сервис с именем "Foo", я могу подключиться через:

$ scutil --nc start Foo

При желании я могу указать пользователя, пароль и секрет, используя флаги с одинаковыми именами:

$ scutil --nc start Foo --user bar --password baz --secret quux

Услугу можно отключить через:

$ scutil --nc stop Foo

Для получения более подробной справки вы можете посмотреть справочную страницу или запустить:

$ scutil --nc help

Обновить

Добавление быстрого скрипта для опроса, пока не будет установлено соединение (в ответ на комментарий Эрика Б.

#!/bin/bash

# Call with <script> "<VPN Connection Name>"

set -e
#set -x

vpn="$1"

function isnt_connected () {
    scutil --nc status "$vpn" | sed -n 1p | grep -qv Connected
}

function poll_until_connected () {
    let loops=0 || true
    let max_loops=200 # 200 * 0.1 is 20 seconds. Bash doesn't support floats

    while isnt_connected "$vpn"; do
        sleep 0.1 # can't use a variable here, bash doesn't have floats
        let loops=$loops+1
        [ $loops -gt $max_loops ] && break
    done

    [ $loops -le $max_loops ]
}

scutil --nc start "$vpn"

if poll_until_connected "$vpn"; then
    echo "Connected to $vpn!"
    exit 0
else
    echo "I'm too impatient!"
    scutil --nc stop "$vpn"
    exit 1
fi

Примечания:

  1. Не ясно, когда эта команда была добавлена в OSX, у меня она есть в Mavericks, и пользователь Eric B. сообщает, что она работает в Lion (10.7.5).
39

Для более новых версий macOS может использоваться очень простая команда, как показано в ответах ниже, например, эта (дайте ей +1!).

Все, что тебе нужно:

 networksetup -connectpppoeservice "UniVPN"

Единственная проблема заключается в том, что вы не можете отключиться с помощью этой команды.


Вы также можете использовать AppleScript для подключения к VPN-сервисам по вашему выбору. Мы будем использовать функции оболочки, которые доступны из командной строки после их загрузки.

Добавьте указанные ниже функции в ваш ~/.bash_profile или ~/.profile (что бы вы ни использовали).

Вам просто нужно изменить имя самого VPN-соединения, как это указано в настройках сети . Я использовал свой университетский VPN здесь.

Вы также можете изменить названия функций, если хотите сделать это для разных. Можно было бы сократить это, используя аргументы, но это прекрасно работает. Я тестировал его на Snow Leopard (но Leopard и Lion тоже должны работать).

После добавления функций перезагрузите терминал и вызовите их с помощью vpn-connect и vpn-disconnect соответственно.


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

function vpn-disconnect {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "UniVPN" -- your VPN name here
                if exists VPN then disconnect VPN
        end tell
end tell
return
EOF
}
26

Я не проверял это под Lion, но я использую следующую команду под Mountain Lion без проблем:

networksetup -connectpppoeservice UniVPN
0

Я только что использовал приведенный выше скрипт от slhck (который явно золотой бог), чтобы создать этот отличный рубиновый скрипт, который можно было бы использовать для всех видов вещей.

class SwitchIp

def go
  turn_off
  sleep 3
  turn_on
end

def turn_on
  `/usr/bin/env osascript <<-EOF
      tell application "System Events"
        tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then connect VPN
      end tell
    end tell
  EOF` 
end

def turn_off
  `/usr/bin/env osascript <<-EOF
    tell application "System Events"
      tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then disconnect VPN
      end tell
  end tell
 EOF`
end

end

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .