構成ファイルを編集せずにコマンドラインからWPA2に接続する

構成ファイルを編集せずにコマンドラインからWPA2に接続する

Bashスクリプトを使用してWPA2ネットワークに接続しようとしています。一般的なアプローチは次のとおりです。

wpa_passphrase SSID PASSWORD > CONFIG_FILE
wpa_supplicant -B -iwlan0 -cCONFIG_FILE -Dwext

しかし、パスワードがファイルに残っていることを望まない。単一コマンドでオープンおよびWEPネットワークを設定する方法と同様に、設定ファイルを使用せずに(一時的に)WPA2ネットワークを設定する同様の方法はありますかiwconfig wlan0 essid SSID key s:PASSWORD

ベストアンサー1

私の意見では、すでに示唆されたアイデアを始めとして答えを提供したいと思います。答えは、GNU wpa_supplicant(バージョンv2.6)wpa_passphrase、GNU(バージョン4.4.23)、Linux 4.18bashの組み合わせを使用して特定の状況で動作するようにテストされました。

ここで提供されているソリューションの目的は次のとおりです。残りのパスワードファイルを避けるより一般的なposixアプローチを採用するために、実験に使用できるArch Linux設定のみをテストしました。

私は走った

strace wpa_supplicant -i <WIFIINTERFACE> -c <(wpa_passphrase <SSID> <PASSPHRASE>) 2>&1 | less

私のWi-Fiネットワークの実際のパラメータを使用してください。接続が確立されました。ページの閲覧中に次のことがわかりました。

execve("/usr/bin/wpa_supplicant", ["wpa_supplicant", "-i", "wlp0s29u1u2", "-c", "/dev/fd/63"], 0x7fffc7b0ad10 /* 39 vars */) = 0
[....]
openat(AT_FDCWD, "/dev/fd/63", O_RDONLY) = 3
fstat(3, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
read(3, "network={\n\tssid=\"Oscarone\"\n\t#psk"..., 4096) = 116
read(3, "", 4096)                       = 0
close(3)                                = 0
socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE) = 3
bind(3, {sa_family=AF_NETLINK, nl_pid=0, nl_groups=0x000001}, 12) = 0
[....]

これはプロセス置換()command <(other command)のための作業方法でなければなりません。 wpa_supplicantがパイプにアクセスして/dev/fd/63設定を読み取った後、fdを閉じてから3ファイルディスクリプタを直接再利用してopenを実行することがわかりますsocket

viaを再確認しましたが、ls -ialh /proc/<pid of wpa_supplicant>/3次のように報告されました。これは、パスワードフレーズの唯一の一時的なアクセシビリティ(571637 lrwx------ 1 root root 64 Aug 23 20:49 3 -> 'socket:[571092]' fdで開かれたfifoを介して)が実際に閉じられ、まだ適切に通知されていることを意味します。/dev/fd/533socketstrace

「ファイルなし」「ファイルなし」コマンドラインを作成する方法については、wpa_supplicantArch Linux Wiki(https://wiki.archlinux.org/index.php/WPA%20申請者)

私も明確な点を指摘したい。シェルにパスワードを入力するので、シェル履歴に記録されていないことを確認し、次のような操作を行います。

set +o history
wpa_supplicant -i INTERFACE -c <(wpa_passphrase SSID PASSPHRASE) &
set -o history

(ここに示すようにhttps://unix.stackexchange.com/a/10923/24394)

おすすめ記事