私は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を使いました
関数の名前も、別のものにするのであれば変更しても構いません。引数を使って短縮することも可能かもしれませんが、この方法でも問題なく動作します。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
}
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:
- このコマンドがいつ 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