Bashスクリプトを使用してWPA2ネットワークに接続しようとしています。通常のアプローチは次のようなものです。
wpa_passphrase SSID PASSWORD > CONFIG_FILE
wpa_supplicant -B -iwlan0 -cCONFIG_FILE -Dwext
ただし、パスワードをファイルに保持したくありません。オープンファイルとWEPネットワークを単一のコマンドiwconfig wlan0 essid SSID key s:PASSWORD
?
私のコメントですでに示唆されているアイデアから始めて、私は答えを提供したいと思います。答えは、_wpa_supplicant
_(バージョンv2.6)、_wpa_passphrase
_、GNU bash
(バージョン4.4.23)、およびLinux 4.18。
残りのパスフレーズファイルを避けるを目的としたここで提供されるソリューションは、より一般的なposixの方法で採用できると思いますが、実験に使用できるArch Linuxセットアップのみをテストしました。
私は走った
_strace wpa_supplicant -i <WIFIINTERFACE> -c <(wpa_passphrase <SSID> <PASSPHRASE>) 2>&1 | less
_
私の無線LANネットワークの実際のパラメータで。そして、接続が確立されました。また、私がこれを見つけた状態を閲覧しています:
_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
_を閉じた後、ファイル記述子がsocket
。
_ls -ialh /proc/<pid of wpa_supplicant>/3
_を介して二重チェックし、それは次のように報告します:_571637 lrwx------ 1 root root 64 Aug 23 20:49 3 -> 'socket:[571092]'
_(_/dev/fd/53
_のfifoを介してfd _3
_として開かれた) socket
が正しく通知したように、今でもstrace
です。
また、_wpa_supplicant
_の「ファイルなし」「ファイルなし」コマンドラインを作成するこの方法に関する情報は、Arch Linuxウィキ( https://wiki.archlinux。 org/index.php/WPA%20supplicant )
自明のことも指摘したい。シェルにパスワードを入力するので、パスワードがシェルの履歴に記録されないようにして、次のようなことを行ってください。
_set +o history
wpa_supplicant -i INTERFACE -c <(wpa_passphrase SSID PASSPHRASE) &
set -o history
_
(ここに記載されているように https://unix.stackexchange.com/a/10923/24394 )