编写脚本将 OVPN 文件快速导入 Ubuntu 上的 NetworkManager

编写脚本将 OVPN 文件快速导入 Ubuntu 上的 NetworkManager

我想快速将 ovpn 文件导入 NetworkManager 并将我的登录详细信息附加到 NetworkManager 将使用的最终 conf 文件中。

基本上把这个

client
dev tun
proto udp
remote italy.privateinternetaccess.com 1197
resolv-retry infinite
nobind
persist-key
persist-tun
cipher AES-256-CBC
auth SHA256
tls-client
remote-cert-tls server
auth-user-pass
comp-lzo
verb 1
reneg-sec 0
crl-verify crl.rsa.4096.pem
ca ca.rsa.4096.crt
disable-occ

进入这个

[connection]
id=Singapore
uuid=<unique id gen by uuidgen>
type=vpn
permissions=
secondaries=

[vpn]
connection-type=password
auth=SHA256
password-flags=0
remote=sg.privateinternetaccess.com:1197
cipher=AES-256-CBC
comp-lzo=yes
reneg-seconds=0
username=<username>
remote-cert-tls=server
ca=ca.rsa.4096.crt
dev=tun
service-type=org.freedesktop.NetworkManager.openvpn

[vpn-secrets]
password=<password>

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

通常,当 NetworkManager 导入提供的 OVPN 文件时,它会输出此内容。

[connection]                                                                                                                                                                                                     
id=Ireland
uuid=174fa5b0-0b49-40bc-a301-756acd341c12
type=vpn
permissions=
secondaries=

[vpn]
connection-type=password
auth=SHA256
password-flags=1
remote=ireland.privateinternetaccess.com:1197
cipher=AES-256-CBC
comp-lzo=yes
reneg-seconds=0
remote-cert-tls=server
ca=ca.rsa.4096.crt
dev=tun
service-type=org.freedesktop.NetworkManager.openvpn

[ipv4]
dns-search=
method=auto

[ipv6]
addr-gen-mode=stable-privacy
dns-search=
method=auto

我可以通过 sed 快速更改密码标志,但我不知道如何附加username[vpn-secrets]部分。

任何帮助,将不胜感激。

答案1

新的 PIA OpenVPN 配置文件中包含一些错误,可能会阻止 OpenVPN 连接启动。

这些都是错误。

...
cipher aes-256-cbc
auth sha-256
...

修复方法相对简单,只需将它们全部改为大写即可。您可以使用 sed 对所有配置文件快速完成此操作。

sed -i 's/aes-256-cbc/AES-256-CBC/g' *.ovpn

sed -i 's/sha256/SHA256/g' *.ovpn

要使用 NetworkManager 快速导入文件,请使用此命令。

for i in *.ovpn; do nmcli connection import file "$i" type openvpn; done

如果您希望将用户名和密码添加到 NetworkManager 配置文件中,请按照以下步骤操作。

首先创建一个脚本。

#!/bin/bash

# Changes password-flags from 1 to 0
sed -i 's/password-flags=1/password-flags=0/g' $1

# Adds in a username entry after reneg-seconds
sed -i '/reneg-seconds=0/a username=<insert username here>' $1

# Adds in a section [vpn-secrets] for passwords after line 21
sed -i '21 a [vpn-secrets]' $1

# Adds in password into the config file after [vpn-secrets]
sed -i '/\[vpn-secrets]/a password=<insert password here>' $1

# Adds in a new line after password=    
sed -i '/password=/a\\' $1

导航到/etc/NetworkManager/system-connectionsNetworkManager 存储其配置文件的位置或位置。

要快速迭代所有配置文件的脚本,请运行此命令。

for i in "*"; do <script location> "$i"; done

答案2

这是 Ghostinzshell 脚本的修改版本,适用于 ProtonVPN 配置。结果他使用固定线路 21 来添加 vpn-secrets,我只是在下面添加了一些已知文本(服务类型):

#!/bin/bash

# Changes password-flags from 1 to 0
sed -i 's/password-flags=1/password-flags=0/g' $1

# Adds in a username entry after reneg-seconds
sed -i '/reneg-seconds=0/a username=USERNAME_HERE' $1

# Adds in password into the config file after [vpn-secrets]
sed -i '/service-type=/a\
\
[vpn-secrets]' $1
sed -i '/\[vpn-secrets]/a password=PASSWORD_HERE' $1

答案3

我创建了一个脚本,仅使用官方支持的 API(无需sed修改)来执行此操作:

#! /bin/sh

read -sp 'Username: ' username
echo
read -sp 'Password: ' password

for path in "$@"
do
    name=$(basename "$path" ".ovpn")

    sudo nmcli --terse connection delete id "$name" > /dev/null
    sudo nmcli --terse connection import type openvpn file "$path" > /dev/null

    sudo nmcli connection modify "$name" vpn.persistent true
    sudo nmcli connection modify "$name" vpn.user-name "$username"
    sudo nmcli connection modify "$name" +vpn.data "password-flags = 0, username = $username"
    sudo nmcli connection modify "$name" +vpn.secrets "password=$password"
done

echo

假设脚本被调用import-openvpn,你可以像这样使用它:

$ import-openvpn *.ovpn
Username:
Password:

这将删除现有的 VPN 连接,然后使用指定的用户名和密码重新建立它们。

相关内容