如何将 NetworkManager 设置导出并迁移到新系统?
用例是:
- 重新安装机器
- 将网络配置从笔记本电脑移动到台式机系统(反之亦然)
应迁移所有设置,包括:
- 默认和自定义网络连接
- 带密码的 wifi 连接
- VLAN配置
- VPN 配置(如果可能的话带有密钥)
我查了一下 Arch wiki,没有关于迁移的内容,所以我在这里向你们询问。
答案1
NetworkManager 中配置的每个连接都存储在以下文件中
/etc/NetworkManager/system-connections
通常,您可以将所需的文件从一台计算机复制到另一台计算机(当然是通过root)。
警告:某些配置文件可以引用外部资源。例如,在我的一个 openvpn 文件中,我有一行类似cert=/home/andcoz/somedir/somefile.crt
.您需要复制任何引用的文件。
警告2:默认情况下,密码不会出现在这些文件上。看文档。相反,诸如 之类的行private-key-flags=1
,表示密码保存在您的秘密代理中(例如kde wallet
)。在大多数 GUI 客户端中,这是通过每个密码下的下拉菜单“仅存储此用户的密码(加密)”来控制的。如果更改为其他值,该-flags
值将更改为0
,并且密码将位于这些文件上(仅由 root 读取)。
答案2
正如其他人提到的,system-connections
目录中的 Wi-Fi 连接文件包含接口 MAC 地址。这需要与您当前的设置相匹配,因此过程是:
将所有文件从旧机器复制到新机器的目录:
/etc/NetworkManager/system-connections
将每个文件中的 MAC 地址条目从旧 MAC 更改为新 MAC。作为根用户:
cd /etc/NetworkManager/system-connections sed -i -e 's/<old mac>/<new mac>/ *
以防万一,重新启动网络管理器:
systemctl restart NetworkManager
旧 Mac 可以从您复制的任何文件中进行检查,如果不确定是否可以检查新 Mac,则可以检查ip link
(或者从安装系统时可能创建的用于复制文件的连接的文件)。
注意:上面假设您的旧设置和新设置中都有一个 Wi-Fi 接口,但相同的逻辑应该适用于多个接口。
答案3
以下内容对我有用ubuntu:20.10
/etc/NetworkManager/system-connections
复制上面的内容。
确保permissions=user:newusername:;
与您的运行用户匹配(您想要使用 VPN 的那个 -echo $( whoami )
可以提供帮助)
接下来确保您拥有安装了正确的软件包。如果您正在使用openvpn
那么您需要
network-manager-openvpn
network-manager-openvpn-gnome
您还需要service-type
安装正确的软件包。例如使用时service-type=org.freedesktop.NetworkManager.l2tp
那么您需要安装l2tp
网络管理器
最后我遇到的问题是权限对于我来说,这些文件/etc/NetworkManager/system-connections
需要以下权限:
-rw------- 1 root root
当我复制这些文件时,我的用户作为其所有者拥有 775 权限,这导致 NetworkManager 由于某种原因无法使用它们。
答案4
我花了很长时间才弄清楚这一点,但您可以使用以下命令导出个别内容(例如 VPN 设置)nmcli
:
# List connections
nmcli connection
# Export one
nmcli connection export ConnectionName > yourfile
无论您的配置文件在哪里,这都有效,但我认为没有办法一次导出多个文件。不幸的是,这似乎至少不保留密码凭据 - 它可能保留证书凭据。