web-dev-qa-db-ja.com

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

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

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

ただし、パスワードをファイルに保持したくありません。オープンファイルとWEPネットワークを単一のコマンドiwconfig wlan0 essid SSID key s:PASSWORD

6
Exudes

私のコメントですでに示唆されているアイデアから始めて、私は答えを提供したいと思います。答えは、_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

4