回答:
新しいmacOSバージョンでは、以下の回答に示すように、非常に単純なコマンドを使用できます。たとえば、これ(+1を指定してください!)
あなたが必要なのは:
networksetup -connectpppoeservice "UniVPN"
唯一の問題は、このコマンドを使用して切断できないことです。
AppleScriptを使用して、選択したVPNサービスに接続することもできます。シェル関数を使用します。シェル関数は、読み込まれたらコマンドラインから使用できます。
以下に関数を(~/.bash_profile
または~/.profile
使用するものは何でも)追加します。
ネットワーク設定の下に表示されるように、VPN接続自体の名前を変更するだけです。ここで大学のVPNを使用しました。
別の関数に対して行う場合は、関数の名前も変更できます。引数を使用してこれを短縮することは可能かもしれませんが、この方法でうまく機能します。Snow Leopardでテストしました(ただし、LeopardとLionも動作するはずです)。
あなたが機能を追加したら、ターミナルをリロードしてそれらを呼び出す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
}
vpn-connect && git fetch && vpn-disconnect
です。これを行う方法があると思いますか?
vpn-connect
、それは投げるんsyntax error: Expected end of line but found identifier. (-2741)
が、AppleScriptのエディタを使用してアプリケーションにそれを変換し、呼び出した後にopen vpn-connect.app
それが動作します。ただし、そのユーザーのアクティブなGUIセッションがない場合、LSOpenURLsWithRole() failed with error -10810
SSH経由で呼び出すとa がスローされます。
また、少なくともLion 1では、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
接続が確立されるまでポーリングする簡単なスクリプトを追加します(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
脚注:
--user
--username
scutil --nc stop Foo
(ヨセミテで)動作しない理由はありますか?
Lionではこれをテストしていませんが、Mountain Lionでは問題なく次のコマンドを使用しています。
networksetup -connectpppoeservice UniVPN
scutil
が、機能しません!
scutil
ます。保存されたデータをまったく使用しないためです。
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
MacOS 10.14.5 Mojaveで動作します:
VPNの接続:@slhckの回答を使用-> networksetup -connectpppoeservice "VPN Name"
VPNの切断:@encodedの回答から -> scutil --nc stop "VPN Name"
これは、IPSEC VPN上のL2TPで機能しました。Cisco IPSECまたはIKEv2 VPNをテストしませんでした