如何从 shell 脚本/命令行配置新的 NetworkManager 连接?

如何从 shell 脚本/命令行配置新的 NetworkManager 连接?

我整天都在尝试找到一种方法来使用终端/shell 脚本配置可由 NetworkManager 管理的新连接,但没有成功。

原因是我有很多 openvpn 配置文件,我想有一种快速便捷的方法来导入它们,同时因为 NetworkManager openvpn 插件不会解析嵌入在配置文件中的证书,所以配置新 VPN 连接的唯一方法是运行脚本从配置文件中提取证书后通过 GUI 手动执行此操作,这是一个相当漫长而繁琐的过程。

我发现在 RedHat 上 nmcli 实用程序能够通过这种方式配置新连接:

nmcli con add [...]

但这在(标准)Linux Mint 17.1 上是不可能的。

我尝试手动添加新连接,在/etc/NetworkManager/system-connections

[connection]
id=VPNConnection
id=3389cf54-949e-4c69-a746-864f0f8720b8
type=vpn

[vpn]
service-type=org.freedesktop.NetworkManager.openvpn
fragment-size=1300
connection-type=password-tls
password-flags=1
auth=MD5
tunnel-mtu=1500
cipher=AES-256-CBC
comp-lzo=yes
cert-pass-flags=0
remote=[vpn provider]
port=[vpn port]
mssfix=yes
username=[username]
remote-cert-tls=server
cert=[user cert]
ca=[ca cert]
key=[user priv. key]

[ipv6]
method=ignore

[ipv4]
method=auto

但这个新配置没有出现在 NetworkManager 中。

另外,我没有任何 ~/.gconf/system 目录,无论是在我的个人主页下还是在 /root 下。

NetworkManager 可以从哪里读取配置文件?

答案1

检查你的/etc/NetworkManager/NetworkManager.conf

下面[main]应该有一个plugins指令,如果你已经启用了keyfile插件(即plugins=keyfile,ifupdown或类似的),它应该监视/etc/NetworkManager/system-connections/目录中的文件变化。

此外,aman NetworkManager.conf告诉你“它将忽略除 root 之外的任何用户或组可读或可写的文件“”。

不知道这是否能解决您的问题,但值得一试!

根据,它应该与 NetworkManager v7+ 兼容

干杯!/丹尼尔

答案2

这对我有用:

nmcli reload "your connection name"

然后重新启动。重新激活可能也会有效。

答案3

运行没有连接名称的重新加载命令也可以正常工作 - 连接名称由脚本本身内的变量定义id=,可以与文件名不同。

nmcli connection reload 

将重新加载来自的所有连接/etc/NetworkManager/system-connections/

还有三件事必须做:

chmod 600 /etc/NetworkManager/system-connections/*
chown root:root /etc/NetworkManager/system-connections/*

并且脚本本身必须有效:)

要尝试它是否正常工作,您可以使用简单的脚本生成静态 IPv4 地址,并使用以下脚本禁用 IPv6:

#default first network interface is ens192
interface=ens192
#IPv4
ipv4=10.151.62.83
#mask in one or two-digits format - for local networks 8 to 32
maskv4=24
#ipv4 gateway address
gateway=10.151.62.254
#dns
dns="10.0.0.1;10.0.0.2"
#domain which will be used to search hosts, can be more than one 
domain="example.com;example.net"

echo -e "[connection]\nid=$interface\nuuid=$(uuidgen -t)\ntype=ethernet\nautoconnect-pririty=-999\ninterface-name=$interface\n\n[ethernet]\n\n[ipv4]\naddress1=$ipv4/$maskv4,$gateway\ndns=$dns\ndns-search=$domain;\nmay-fail=false\nmethod=manual\n\n[ipv6]\nignore-auto-dns=true\nignore-auto-routes=true\nmethod=disabled\nnever-default=true\n\n[proxy]" > /etc/NetworkManager/system-connections/$interface.nmconnection

相关内容