Запустите настроенный VPN из командной строки (OSX)

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

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

С Помощью Льва.

17
задан Ƭᴇcʜιᴇ007
05.04.2023 11:10 Количество просмотров материала 2524
Распечатать страницу

4 ответа

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

все, что вам нужно, это:

 networksetup -connectpppoeservice "UniVPN"

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


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

добавьте следующие функции в ~/.bash_profile или ~/.profile (чем вы пользуетесь).

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

enter image description here

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

после добавления функций перезагрузите терминал и вызовите их с помощью 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
}
38
отвечен slhck 2023-04-06 18:58

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

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

$ scutil --nc start Foo

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

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

служба может быть отключена через:

$ scutil --nc stop Foo

для более подробной справки можно посмотреть на странице, или run:

$ scutil --nc help

обновление

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

#!/bin/bash

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

set -e
#set -x

vpn=""

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).
50
отвечен encoded 2023-04-06 21:15

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

networksetup -connectpppoeservice UniVPN
26
отвечен pierre-o 2023-04-06 23:32

Я просто использовал приведенный выше сценарий 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
0
отвечен boulder_ruby 2023-04-07 01:49

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх