公衆Wi-Fiの多くは接続時にログインを要求されます.
しかし,毎回アカウントやパスワードを入力するのが面倒なのでこれを自動的にログインできるようにします.
Linuxでの設定は以下で紹介されています:
ここではmacOSにおける設定を行います.
1. Captive Network Assistant
macOSではウェブ認証が必要なネットワークに接続するとCaptive Network Assistantという専用のアプリが自動的に起動して認証画面が表示されます.
このアプリが起動すると他からの通信ができなくなってしまうので,以下のコマンドでこれの起動を停止します.
$ sudo defaults write /Library/Preferences/SystemConfiguration/com.apple.captive.control Active -boolean false
ちなみに以下で元の設定に戻せます:
$ sudo defaults delete /Library/Preferences/SystemConfiguration/com.apple.captive.control Active
この設定を行った後,一度再起動してWi-Fi接続時にCaptive Portalの画面が開かなくなればOKです.
ログインする際はブラウザで適当なところにアクセスすると認証画面にリダイレクトされます.
2. ログイン用スクリプト
ユーザー認証のページを調べるなどして以下のようなログインスクリプトを適当な場所に保存してください.
#!/bin/bash
SSID=`/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/airport -I | awk '/ SSID:/ {print $2}'`
if [ "${SSID}" = "[対象Wi-FiのSSID]" ]; then
ping -o -c 100 1.1.1.1
curl https://example.com/login -F "user=USERNAME" -F "password=PASSWORD"
fi
次の手順でWi-Fiへの接続を検出した際にこのスクリプトを実行するようにするのですが,以下の方法では検出のタイミングと疎通のタイミングがうまく合わなかったので適当なところにpingを送って疎通できるまで待つようにしました.
3. LaunchAgents
Wi-Fi接続時にスクリプトを実行するために~/Library/LaunchAgents/WifiAutoLogin.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>WifiAutoLogin</string>
<key>ProgramArguments</key>
<array>
<string>[ログイン用スクリプトへの絶対パス]</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist</string>
</array>
</dict>
</plist>
そして以下のコマンドで作成したplistをロードします.
$ launchctl load ~/Library/LaunchAgents/WifiAutoLogin.plist
これでWi-Fiに接続した際に自動でログインできるようになりました.