背景
这个周末我要帮一位朋友看家,她已经通过短信给我发送了她的 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
对允许的字符有任何限制吗?
答案1
在磁盘上编辑连接配置文件后,您需要使用 或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 运行时编辑该文件可能效果不佳。