Wpa-Supplicant

從命令行連接到 WPA2,無需編輯配置文件

  • August 23, 2018

我正在嘗試使用 bash 腳本連接到 WPA2 網路。通常的方法是這樣的:

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

但是,我不希望密碼保留在文件中。是否有類似的方法來配置 WPA2 網路而不使用配置文件(即使只是臨時的),類似於如何使用單個命令配置開放和 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

與我的wifi網路的實際參數。並且建立了聯繫。還瀏覽我發現這個的stace:

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
[....]

這應該是如何處理過程替換( the command <(other command))的事情。可以看出 wpa_supplicant 訪問了管道 at/dev/fd/63並讀取了配置,然後進一步關閉,關閉 fd 後3,file-descripter 直接重用於打開 a 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打開為 fd的 fifo3確實已關閉,現在仍然是正確socketstrace通知。

Arch wpa_supplicantlinux wiki ( https://wiki.archlinux.org/index.php/WPA%20supplicant )

我還想指出顯而易見的。由於您在 shell 中輸入了密碼,因此請確保它不會記錄在 shell 歷史記錄中,因此請執行以下操作:

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

(如此處所述https://unix.stackexchange.com/a/10923/24394

引用自:https://unix.stackexchange.com/questions/464460