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.
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.
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
}
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
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:
Je n'ai pas testé cela sous Lion, mais j'utilise la commande suivante sous Mountain Lion sans problème:
networksetup -connectpppoeservice UniVPN
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.
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
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