是否可以在物理接触网络之前预先存储 WiFi 凭据?

是否可以在物理接触网络之前预先存储 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

测试一下

所以,这就是我尝试过的:

  1. 忘记网络etaoin-shrdlu
  2. 打开飞行模式。
  3. 创建以下文件/etc/NetworkManager/system-connections/etaoin-shrdlu.nmconnection(之前忘记网络后删除了)。
  4. 将与先前相同的内容放入该文件中,etaoin-shrdlu.nmconnection并将其uuid更改为630b5230-48cb-4929-9777-fa0f30399810.
  5. 修改以前的版本以/run/NetworkManager/devices/3具有.uuid630b5230-48cb-4929-9777-fa0f30399810
  6. 关闭飞行模式。
  7. 等待并希望它有效......

结果呢?这不起作用。

问题

  1. 我错了什么?
  2. 钥匙是uuid用来做什么的?为什么随机生成就可以呢?
  3. 键的值psk对允许的字符有任何限制吗?

答案1

在磁盘上编辑连接配置文件后,您需要使用 或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 运行时编辑该文件可能效果不佳。

相关内容