是否可以在物理遇到網路之前搶先儲存 WiFi 憑據?
背景
這個週末我將在家為一個朋友坐下,她已經給我發了她的 WiFi SSID 及其密碼。順便說一句,她先發簡訊給我的 WiFi 詳細資訊讓我想到:
當我到達那裡時,與其連接到她的網路,我應該將 WiFi 憑據儲存在我的筆記型電腦(使用 Ubuntu 19.10)和手機(使用 Android 10)上。這樣,我的筆記型電腦和手機就可以自動連接到她的 WiFi 網路了!
所以,我做了一些研究,發現它可能是可能的(至少對於我的筆記型電腦;我認為在 Android 上,我需要 root 訪問權限),但仍有一些問題。
根據我的研究,對於 Ubuntu 19.10,網路憑據似乎儲存在以下目錄中:
/etc/NetworkManager/system-connections
, 每個文件代表一個憑證。例如,我在該文件夾中的一個特定連接
etaoin-shrdlu
具有以下內容:$ sudo cat /etc/NetworkManager/system-connections/etaoin-shrdlu.nmconnection [connection] id=etaoin-shrdlu uuid=515ab528-986b-4bb8-97fe-f744beaa0f2f type=wifi interface-name=wlp3s0 permissions= [wifi] mac-address-blacklist= mode=infrastructure ssid=etaoin-shrdlu [wifi-security] auth-alg=open key-mgmt=wpa-psk psk=nice try hackers [ipv4] dns-search= method=auto [ipv6] addr-gen-mode=stable-privacy dns-search= method=auto [proxy]
該文件似乎相對簡單,即看起來我需要更改的唯一內容是:
- 文件名。
id
價值。- 該
uuid
值(來自線上閱讀,可以隨機生成)。ssid
價值。psk
價值。據推測,要使用的密鑰管理方案將是
wpa-psk
。此外,我發現還有一個文件似乎參與了這個儀式:
/run/NetworkManager/devices/3
,它具有以下配置:
$ sudo cat /run/NetworkManager/devices/3 [device] managed=true connection-uuid=515ab528-986b-4bb8-97fe-f744beaa0f2f route-metric-default-effective=600
,其中與憑證文件中指定
connection-uuid
的相同。uuid
測試它
所以,這就是我嘗試過的:
- 忘記網路
etaoin-shrdlu
。- 開啟飛行模式。
- 創建以下文件
/etc/NetworkManager/system-connections/etaoin-shrdlu.nmconnection
(之前忘記網路後刪除)。- 將與之前相同的內容放入文件中
etaoin-shrdlu.nmconnection
,uuid
更改為630b5230-48cb-4929-9777-fa0f30399810
.- 修改以前版本的 ,使其
/run/NetworkManager/devices/3
具有uuid
。630b5230-48cb-4929-9777-fa0f30399810
- 關閉飛行模式。
- 等待並希望它有效…
結果呢?它不起作用。
問題
- 我怎麼了?
- 鑰匙是
uuid
乾什麼用的?為什麼它可以隨機生成?- 鍵的值是否
psk
對允許的字元有任何限制?
在磁碟上編輯連接配置文件後,您需要使用
nmcli connection reload
或nmcli connection load [FILES...]
(或通過 D-Bus API)重新載入它們。這樣做與通過 D-Bus API 更改配置文件的效果幾乎相同,例如通過nmcli connection modify ...
.請注意,如果您編輯
NetworkManager.conf
(或其中一個conf.d
片段),您可以通過 SIGHUP 或systemctl reload NetworkManager.service
. 某些設置無法重新載入,您需要重新啟動服務。但通常重新啟動不是必需的,也不是首選。不要在 中編輯文件
/var/lib
,它可能不是您想要的。無論如何,所以你修改/創建配置文件,並切換飛行模式。之後,可能會發生自動連接。你大部分都很好,因為你寫的配置文件已經
connection.autoconnect
啟用。但是,以前從未成功連接的 Wi-Fi 配置文件不是自動連接的候選對象。這意味著,您必須通過 手動啟動配置文件至少一次nmcli connection up ...
。您也可能欺騙 NetworkManager 認為配置文件在過去已啟動。為此,設置
connection.timestamp
為正值(以秒為單位的 Unix 時間戳)。請注意,時間戳通常在配置文件之外維護(因為它們在每次啟動時都會更新)。那些在 中/var/lib/NetworkManager/timestamps
,但在 NM 執行時編輯該文件可能效果不佳。