本文譯至:https://wiki.archlinux.org/index.php/WPA_Supplicant_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
wpa_supplicant 是跨平台的 WPAsupplicant,支持 WEP, WPA 和 WPA2 (IEEE 802.11i / RSN (Robust Secure Network)). 可以在桌面、筆記本甚至嵌入式系統中使用。
wpa_supplicant 是在客戶端使用的 IEEE 802.1X/WPA 組件, 支持與 WPA Authenticator 的交互,控制漫游和無線驅動的 IEEE 802.11 驗證和關聯。
安裝
從 官方軟件倉庫 中安裝軟件包 wpa_supplicant。
此外軟件包 wpa_supplicant_gui 提供了圖形界面wpa_gui。
啟動
本節介紹啟動wpa_supplicant的常用方法,選擇一個最適合你的。
systemd
wpa_supplicant提供多種服務的文件:
wpa_supplicant.service
- 使用 D-Bus, 推薦 NetworkManager 的用戶.wpa_supplicant@.service
- 接受接口名作為參數,並為該接口啟動wpa_supplicant守護進程。它讀取/etc/wpa_supplicant/wpa_supplicant-interface.conf的配置文件wpa_supplicant-nl80211@.service
- 也是接口特定的,但明確強制nl80211驅動程序 (見下文). 配置文件路徑是/etc/wpa_supplicant/wpa_supplicant-nl80211-interface.conf
wpa_supplicant-wired@.service
- 也是接口特定的, 使用wired
驅動. 配置文件路徑是/etc/wpa_supplicant/wpa_supplicant-wired-interface.conf
dhcpcd
dhcpcd包含了一個鈎子(默認為啟用)來自動啟動對應無線接口的wpa_supplicant。它只在如下情況下啟動:
- 沒有wpa_supplicant進程在該接口在監聽。
- 存在一個wpa_supplicant的配置文件。dhcpcd 默認檢查 /etc/wpa_supplicant.conf 和 /etc/wpa_supplicant/wpa_supplicant.conf,但可以通過在/etc/dhcpcd.conf設置env wpa_supplicant_conf=configuration_file_path來添加自定義路徑。
手動
wpa_supplicant接受多個命令行參數,特別是:
-B
- 在后台執行-c 文件名
-路徑配置文件-i 接口
- 監聽的接口
關於完整的參數列表,參考 man 8 wpa_supplicant。例如,常見的用法是:
# wpa_supplicant -B -i interface -c configuration_file
配置
wpa_supplicant提供了一個參考配置文件/etc/wpa_supplicant/wpa_supplicant.conf,其中包含了所有可用的選項及其用法和例子的詳細文檔。考慮先把它備份起來,因為下面描述的自動添加網絡配置到wpa_supplicant.conf的方法下刪除了文件中的所有注釋。
在其最簡單的形式中,一個配置文件,只需要一個網絡配置塊。例如:
/etc/wpa_supplicant/foobar.conf
network={ ssid="..." }
一旦你有一個配置文件,如前節所述,就可以啟動wpa_supplicant守護進程,並使用一個靜態IP或DHCP連接到無線網絡。
wpa_passphrase
網絡配置可以使用wpa_passphrase工具自動生成並添加到配置文件中。這在連接到需要密碼的安全網絡時是有用的。例如:
$ wpa_passphrase essid passphrase
network={ ssid="essid" #psk="passphrase" psk=f5d1c49e15e679bebe385c37648d4141bc5c9297796a8a185d7bc5ac62f954e3 }
一些異常復雜的口令可能需要從文件輸入:
$ wpa_passphrase essid < passphrase.txt
# wpa_supplicant -B -i interface -c <(wpa_passphrase essid passphrase)
指定驅動
您可能需要指定一個驅動來使用。關於支持的驅動程序的列表,請參考wpa_supplicant -h的輸出結果。
nl80211
是當前的標准,但不是所有的無線芯片的模塊支持。wext
目前已過時,但仍得到廣泛支持。
使用 -D
開關來指定驅動:
# wpa_supplicant -B -i interface -c configuration_file -D driver
使用 wpa_cli
wpa_supplicant可以通過使用wpa_cli命令,在運行時手動進行控制。要啟用wpa_cli,wpa_supplicant守護進程必須被配置為通過在wpa_supplicant的配置文件(默認位置:/etc/wpa_supplicant/wpa_supplicant.conf)設置ctrl_interface變量來創建一個“控制接口”(套接字)。
用戶也將需要通過指定可以訪問它的組來獲准訪問該套接字。一個新的組可能為此被創建,並且用戶添加到它,或已存在的組可以使用 - 通常是 wheel。
下面的設置將在/run/wpa_supplicant/中創建套接字並允許wheel組的成員進行訪問:
ctrl_interface=DIR=/run/wpa_supplicant GROUP=wheel
可以通過wpa_cli修改的wpa_supplicant配置文件自身。這在手動添加新的網絡到配置文件,而無需重新啟動wpa_supplicant守護進程時是有用的。為了實現這一目標,在配置文件中設置update_config變量設置為1:
update_config=1
在wpa_cli開始之前,wpa_supplicant守護進程必須處於運行狀態。(見#Starting了解詳情)。然后啟動
$ wpa_cli
它會尋找配置文件中給定位置的控制套接字,位置也可以使用p選項手動設置)。您可以使用-i選項配置的接口,不然的話將使用wpa_supplicant所管理的第一個被找到的無線接口。
當wpa_cli被調用時,將出現交互式提示符(>)。提示包括tab 補全和已完成命令的說明。
使用wpa_cli添加一個新的網絡
掃描可用網絡,在>提示符之后輸入“scan”。在掃描完成后將顯示通知:
> scan OK <3>CTRL-EVENT-SCAN-RESULTS >
然后輸入 "scan_results" 來顯示結果:
> scan_results bssid / frequency / signal level / flags / ssid 00:00:00:00:00:00 2462 -49 [WPA2-PSK-CCMP][ESS] MYSSID 11:11:11:11:11:11 2437 -64 [WPA2-PSK-CCMP][ESS] ANOTHERSSID >
為了與MYSSID相關聯,需要告知wpa_supplicant。在配置文件中的各個網絡是以零開始按數值進行索引。如果您添加了一個新的網絡,它會被相應地分配一個新數字。
> add_network 0 >
使用這個數字來指定你的設置應用到哪個網絡。對於一個新的網絡,在引號里設置其SSID:
> set_network 0 ssid "MYSSID" OK >
即使你的無線接入點沒有被保護,cli也顯式地需要一個PSK,同樣在引號內。密碼必須是8-63個字符:
> set_network 0 psk "passkey" OK >
使能:
> enable_network 0 OK >
將修改寫入配置文件:
> save_config OK >
動作腳本
wpa_cli可以在后台模式下運行,並執行基於wpa_supplicant事件的指定腳本。可以支持兩類事件:連接和斷開。一些環境變量可用於腳本,細節請參考man 8wpa_cli。
下面的例子將使用桌面通知,通知有關事件的用戶:
#!/bin/bash case "$2" in CONNECTED) notify-send "WPA supplicant: connection established"; ;; DISCONNECTED) notify-send "WPA supplicant: connection lost"; ;; esac
記住修改腳本為可執行,然后使用-a來傳遞腳本路徑給wpa_cli:
$ wpa_cli -a path_to_script