61 votes

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

J'ai deux configurations VPN sur mon mac et j'aimerais pouvoir les lancer à partir de la console lorsque je me connecte par ssh à ma machine.

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

Utilisation de Lion.

63voto

encoded Points 836

Vous pouvez également, depuis au moins Lion 1 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 consulter le page de manuel ou courir :

$ scutil --nc help

Mise à jour

Ajout d'un script rapide pour interroger jusqu'à ce que la connexion soit établie (en réponse au commentaire d'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 exactement quand cette commande a été ajoutée à OSX, je l'ai dans Mavericks, et l'utilisateur Eric B. signale qu'elle fonctionne dans Lion (10.7.5).

61voto

slhck Points 209720

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 vous avez besoin :

 networksetup -connectpppoeservice "UniVPN"

Le seul problème est que vous ne pouvez pas vous déconnecter en utilisant cette commande.


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

Ajoutez les fonctions ci-dessous à votre ~/.bash_profile o ~/.profile (ce que vous utilisez).

Il vous suffit de modifier le nom de la connexion VPN elle-même, tel qu'il apparaît sous le nom de l'utilisateur. Réseau préférences. J'ai utilisé le VPN de mon université ici.

enter image description here

Vous pouvez également modifier les noms des fonctions, si vous souhaitez le faire pour des fonctions différentes. Il serait possible de raccourcir cette fonction en utilisant des arguments, mais cela fonctionne très bien de cette façon. Je l'ai testé sur Snow Leopard (mais Leopard et Lion devraient aussi 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
}

31voto

pierre-o Points 291

Je ne l'ai pas testé sous Lion mais j'utilise la commande suivante sous Mountain Lion sans aucun problème :

networksetup -connectpppoeservice UniVPN

4voto

Feng Liu Points 121

Vous pouvez utiliser networksetup -connectpppoeservice "myvpn" pour vous connecter à un vpn nommé myvpn, et utiliser networksetup -disconnectpppoeservice "myvpn" pour se 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.

0voto

boulder_ruby Points 378

Je viens d'utiliser le script ci-dessus par slhck (qui est clairement un dieu doré) 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X