macos – コマンドラインから設定した VPN を起動 (OSX)

command-line macos osx-lion vpn

私はmacで2つのVPN設定をしていますが、マシンにsshしたときにコンソールから起動できるようにしたいと思っています

私は私が接続を設定することができますコマンドnetworksetupを見つけましたが、私は実際に1つを起動しないことを伝えることができる限りでは

Using Lion.

  55  Ketema  2011-11-17


ベストアンサー

新しいバージョンのmacOSでは、以下の回答にあるように、非常にシンプルなコマンドを使用することができます、例えば、this one (それに+1を与えてください!)

必要なのは

 networksetup -connectpppoeservice "UniVPN"

ただ、このコマンドを使って切断できないのが問題です


AppleScriptを使って、お好みのVPNサービスに接続することもできます。ここでは、コマンドラインから利用できるシェル関数を、一度読み込んでから利用します

以下の関数を ~/.bash_profile または ~/.profile に追加してください

ネットワーク環境設定の下に表示されているので、VPN接続の名前自体を変更するだけです。私はここで大学のVPNを使いました

enter image description here

関数の名前も、別のものにするのであれば変更しても構いません。引数を使って短縮することも可能かもしれませんが、この方法でも問題なく動作します。Snow Leopard でテストしてみました (Leopard と Lion でも動作するはずです)

関数を追加したら、ターミナルをリロードして、それぞれvpn-connectvpn-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
}

53  slhck  2011-11-17


また、少なくともLion1の時点では、scutilコマンドを使うこともできます

例えば、「Foo」というVPNサービスがあれば、経由して接続することができます

$ scutil --nc start Foo

同名のフラグを使って、ユーザ、パスワード、シークレットをオプションで指定することができます

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

を経由してサービスを切断することができます

$ scutil --nc stop Foo

より詳細なヘルプについては、man ページを参照するか、実行してください

$ scutil --nc help

Update

接続が確立されるまでポーリングするためのクイックスクリプトの追加 (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

Footnotes:

  1. このコマンドがいつ OSX に追加されたのかは不明ですが、私は Mavericks で使用しており、ユーザーの Eric B. は Lion (10.7.5) で動作していると報告しています

60  encoded  2014-04-02


Lionでは試していませんが、Mountain Lionでは以下のコマンドで問題なく動作しています

networksetup -connectpppoeservice UniVPN

28  pierre-o  2013-02-26


networksetup -connectpppoeservice "myvpn"でmyvpnという名前のvpnに接続し、networksetup -disconnectpppoeservice "myvpn"でmyvpnという名前のvpnから切断することができます

これらのコマンドラインを使用する前に、システム環境設定 > ネットワークで手動で接続を設定する必要があります

2  Feng Liu  2019-04-24


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  2012-10-16


MacOS 10.14.5 Mojaveで動作します

VPN接続:@slhckの回答 -> networksetup -connectpppoeservice "VPN Name"を使用します

VPNを解除します。@encodedの回答 -> scutil --nc stop "VPN Name"から

これは私の L2TP over IPSEC VPN で動作しました。私は Cisco IPSEC や IKEv2 VPN をテストしませんでした

0  Eric Nelson  2019-06-07


タイトルとURLをコピーしました