web-dev-qa-db-fra.com

Démarrer le VPN configuré à partir de la ligne de commande (OSX)

J'ai deux configurations VPN sur mon mac et j'aimerais pouvoir les démarrer à partir de la console lorsque je ssh sur ma machine.

J'ai trouvé la commande networksetup qui me permet de configurer des connexions, mais pour autant que je sache, n'en commencez pas.

Utiliser Lion.

47
Ketema

Pour les versions plus récentes de macOS, une commande très simple peut être utilisée, comme indiqué dans les réponses ci-dessous, par exemple. celui-ci (donnez-lui un +1!).

Tout ce dont tu as besoin c'est:

 networksetup -connectpppoeservice "UniVPN"

Le seul problème est que vous ne pouvez pas vous déconnecter à l'aide de cette commande.


Vous pouvez également utiliser AppleScript pour vous connecter aux services VPN de votre choix. Nous utiliserons les fonctions Shell, disponibles à partir de la ligne de commande, une fois qu'elles sont chargées.

Ajoutez les fonctions ci-dessous à votre ~/.bash_profile ou ~/.profile (celui que vous utilisiez).

Il vous suffit de modifier le nom de la connexion VPN elle-même, telle qu'elle apparaît dans les préférences Réseau . J'ai utilisé mon VPN universitaire ici.

enter image description here

Vous pouvez également modifier le nom des fonctions si vous souhaitez le faire pour différentes. Il serait peut-être possible de raccourcir cela en utilisant des arguments, mais cela fonctionne parfaitement de cette façon. Je l'ai testé sur Snow Leopard (mais Leopard et Lion devraient également fonctionner).

Une fois que vous avez ajouté les fonctions, rechargez le terminal et appelez-les avec vpn-connect et vpn-disconnect, respectivement.


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
}
41
slhck

Vous pouvez aussi, à partir d’au moins Lion1, utilisez la commande scutil.

Par exemple, si j'ai un service VPN nommé "Foo", je pourrais me connecter via:

$ scutil --nc start Foo

Je peux éventuellement spécifier un utilisateur, un mot de passe et un secret en utilisant des drapeaux du même nom:

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

Le service peut être déconnecté via:

$ scutil --nc stop Foo

Pour une aide plus détaillée, vous pouvez voir la page de manuel , ou exécuter:

$ scutil --nc help

Mettre à jour

Ajout d’un script rapide à interroger jusqu’à ce que la connexion soit établie (en réponse au commentaire de Eric B.

#!/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

Notes de bas de page:

  1. On ne sait pas quand cette commande a été ajoutée à OSX, je l'ai dans Mavericks et l'utilisateur Eric B. indique que cela fonctionne dans Lion (10.7.5).
55
encoded

Je n'ai pas testé cela sous Lion, mais j'utilise la commande suivante sous Mountain Lion sans problème:

networksetup -connectpppoeservice UniVPN
26
pierre-o

Vous pouvez utiliser networksetup -connectpppoeservice "myvpn" pour vous connecter à un vpn nommé myvpn et utiliser networksetup -disconnectpppoeservice "myvpn" pour vous déconnecter du vpn nommé myvpn.

Avant d’utiliser ces lignes de commande, vous devez configurer manuellement une connexion dans Préférences Système> Réseau.

0
Feng Liu

Fonctionne sur MacOS 10.14.5 Mojave:

Connect VPN : utilisez la réponse de @ slhck -> networksetup -connectpppoeservice "VPN Name"

Déconnecter le VPN : De La réponse de @ encoded -> scutil --nc stop "VPN Name"

Cela a fonctionné pour mon L2TP sur VPN IPSEC. Je n'ai pas testé les VPN IPSEC ou IKEv2 de Cisco

0
Eric Nelson

J'ai juste utilisé le script ci-dessus de slhck (qui est clairement un dieu d'or) pour créer ce script Ruby astucieux qui pourrait être utilisé pour toutes sortes de choses

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