OS X 10.7.3でVPN接続を構成しましたが、接続先のネットワークは企業プロキシを使用し、カスタムMavenリポジトリサーバーとその他のネットワーク固有の設定(リモートドライブなど)を使用しているため、 VPNのログオン/ログオフ時にスクリプトを実行して次のことを行います。
~/.m2/settings.xml
彼らのMavenリポジトリを指すsmb://
株、しかし、これを達成する方法はわかりません。
すでにVPNを構成している場合は、コマンドラインからVPNに接続できます。説明したように この回答では~/.bash_profile
に追加することで、ログインとログアウト用にそれぞれ2つのシェル関数を作成できます– 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
end tell
end tell
EOF
# insert your commands here
}
EOF
マーカーの後に必要なカスタムコマンドを含めるだけです。
GUIでそれを行う方法が必要な場合は、Automator.appを開き、新しいアプリケーション。次に、アクションをドラッグして左側のペインからAppleScriptおよびシェルスクリプトを実行し、以下に示すようにコマンドを挿入します。
次に、この疑似アプリケーションをDockに配置するだけで、すばやく起動できます。
別の解決策は、 LaunchDaemon を使用して特定のディレクトリを監視し、そのディレクトリに変更が加えられるたびに外部スクリプトを起動することです。 Mac Developer Libraryは そのようなスクリプトの概要 を提供します(それらの例は/etc/hostconfig
を監視し、そのファイルの変更時間が変更されるたびにsyslog -s -l notice "somebody touched /etc/hostconfig"
を実行します。)
私たちの目的のために、VPNにログインするたびに、ディレクトリ/Library/Preferences/SystemConfiguration
が変更されることに注意してください。したがって、次のplistファイルを/Library/LaunchDaemons/vpn.connectscript.plist
内に保存すると、そのディレクトリが監視されます。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN"
"http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>vpn.connectscript</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>/opt/local/bin/vpn_some_script.sh</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration</string>
</array>
</dict>
</plist>
このLaunchDaemonは、VPN接続以外にも呼び出されることに注意してください(たとえば、wifiに接続するたびに)。したがって、スクリプト/opt/local/bin/vpn_some_script.sh
は、トンネルが実際に接続されていることを確認する必要があり、スクリプトが連続して複数回実行されても問題が発生しないようにする必要があります。 (したがって、共有をマウントする場合は、それらがまだマウントされていないことを確認することをお勧めします)。
たとえば、私のスクリプト/opt/local/bin/vpn_some_script.sh
は単純に次のとおりです。
#!/bin/bash
# This only changes the routes table if utun0 exists.
# -n checks that `ifconfig utun0` returns something other than "" on STDOUT
# The 2> /dev/null redirects STDERR to null, to silence errors
if [[ -n `ifconfig utun0 2> /dev/null` ]] ; then
route -n add -net 10.0.0.0/8 -interface utun0
# Find the old default gateway
GATEWAY=`route -n get default -ifscope en0 | grep gateway | awk '{ print $2 }'`
# make everything (except blocks described above) go through old default gateway rather than VPN
route -n change default $GATEWAY
fi
これは、VPNトンネルに接続している場合にのみ、トンネルを介して10.0.0.0/8にルートを追加します(デフォルトを変更して192.168.1.1ルーターに移動します)。
Plistファイルを保存すると、次回の再起動時に自動的にロードされます。ただし、次の方法で手動でロードすることもできます。
Sudo launchctl load -w /Library/LaunchDaemons/vpn.connectscript.plist
Bashスクリプトにroot権限が必要な場合(たとえば、ルーティングテーブルを変更する私のスクリプト)、それを/Library/LaunchDaemons/
(または/System/Library/LaunchDaemons
)に保存する必要があることに注意してください。スクリプトを通常のユーザーとして実行する必要がある場合は、~/Library/LaunchAgents/
に保存する必要があります。
スクリプトがrootとして実行され、特権昇格攻撃を受けたくない場合、呼び出されるbashスクリプトは、rootによってのみ変更できる/opt/local/bin/
のようなディレクトリにある必要があります。たとえば~/bin
に保存した場合、通常のユーザーがスクリプトを変更して(または、ファイル/ディレクトリの名前を変更して、自分が作成したファイルに置き換える)、システムへのフルアクセスを取得できます。
接続前のスクリプトの場合は/etc/ppp/ip-up
、接続後のスクリプトの場合は/etc/ppp/ip-down
。実行許可ビットを追加することを忘れないでください。 PPTPおよびL2TPVPN接続の前後のルートテーブルの変更と復元に使用します。
ip-up
とip-down
という名前の2つのスクリプトを作成したら、Terminal.appで次のコマンドを実行します。
chmod +x ip-up ip-down
Sudo cp ip-up ip-down /etc/ppp