間違ったパスワードが検出された場合、wpa_supplicant はプロセスを終了します。

間違ったパスワードが検出された場合、wpa_supplicant はプロセスを終了します。

通常、実行するとwpa_supplicant次のような出力が得られます。

Successfully initialized wpa_supplicant
ioctl[SIOCSIWAP]: Operation not permitted
ioctl[SIOCSIWENCODEEXT]: Invalid argument
ioctl[SIOCSIWENCODEEXT]: Invalid argument
wlan3: Trying to associate with 9c:3d:cf:fb:95:96 (SSID='Bell420' freq=2462 MHz)
wlan3: Association request to the driver failed
wlan3: Associated with 9c:3d:cf:fb:95:96
wlan3: Authentication with 9c:3d:cf:fb:95:96 timed out.
ioctl[SIOCSIWAP]: Operation not permitted
wlan3: CTRL-EVENT-DISCONNECTED bssid=9c:3d:cf:fb:95:96 reason=3 locally_generated=1
wlan3: WPA: 4-Way Handshake failed - pre-shared key may be incorrect

問題は、何度も何度も試行し続けることです。

wpa_supplicant間違ったキーなどの明らかなエラーが発生したらすぐに終了するように指示する方法はありますか?

私は古い組み込みデバイスを使用していますwpa_supplicant v2.1


wpa_supplicant不正なキーを監視するための回避策を書きました。on (with based on)grepを使用すると、wpa_supplicantstdbufステファン・シャゼラスのコメントはこちら):

  # Create conf file with ssid and password
  wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

  # If wifi key is wrong kill subshell
  subshell=$BASHPID
  (sudo stdbuf -o0 wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf 2>&1 \
    | grep -m 1 "pre-shared key may be incorrect" \
    && kill -s PIPE "$subshell") &

注: 上記のブロックはスクリプトのサブシェル内にあります。

最初はうまくいっているように見えましたが、時間が経つにつれて、パスワードが正しいのにスクリプト全体が失敗することがあることに気付きました。他のときは期待どおりに動作しました。

これを行うにはもっと良い方法があるはずです。


編集: 代わりにここを使うべきでしょうかwpa_cli?

答え1

#!/bin/bash

# SSID and password
ssid="YourSSID"
password="YourPassword"

# Create wpa_supplicant.conf
wpa_passphrase "$ssid" "$password" > /etc/wpa_supplicant/wpa_supplicant.conf

# Run wpa_supplicant in the background
wpa_supplicant -Dwext -iwlan1 -c/etc/wpa_supplicant/wpa_supplicant.conf > /tmp/wpa_supplicant.log 2>&1 &

# Monitor log file for error messages
tail -f /tmp/wpa_supplicant.log | while read -r line; do
    if [[ $line == *"pre-shared key may be incorrect"* ]]; then
        echo "Incorrect key detected. Exiting..."
        kill $!
    fi
done

wpa_supplicantはバックグラウンドで実行され、その出力はログ ファイルにリダイレクトされます。コマンドはtail継続的にログ ファイルを読み取り、指定されたエラー メッセージをチェックします。エラー メッセージが見つかった場合は、メッセージを出力し、プロセスを強制終了してスクリプトを終了しますwpa_supplicant

関連情報