Networking

是否可以在物理遇到網路之前搶先儲存 WiFi 憑據?

  • December 7, 2019

背景

這個週末我將在家為一個朋友坐下,她已經給我發了她的 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

測試它

所以,這就是我嘗試過的:

  1. 忘記網路etaoin-shrdlu
  2. 開啟飛行模式。
  3. 創建以下文件/etc/NetworkManager/system-connections/etaoin-shrdlu.nmconnection(之前忘記網路後刪除)。
  4. 將與之前相同的內容放入文件中etaoin-shrdlu.nmconnectionuuid更改為630b5230-48cb-4929-9777-fa0f30399810.
  5. 修改以前版本的 ,使其/run/NetworkManager/devices/3具有uuid630b5230-48cb-4929-9777-fa0f30399810
  6. 關閉飛行模式。
  7. 等待並希望它有效…

結果呢?它不起作用。

問題

  1. 我怎麼了?
  2. 鑰匙是uuid乾什麼用的?為什麼它可以隨機生成?
  3. 鍵的值是否psk對允許的字元有任何限制?

在磁碟上編輯連接配置文件後,您需要使用nmcli connection reloadnmcli 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 執行時編輯該文件可能效果不佳。

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