在终端 14.04 中输入“nmcli con up”的密码

在终端 14.04 中输入“nmcli con up”的密码

我正在尝试使用终端连接到我的 VPN。我的 VPN 密码是 TOTP,因此无法将其保存到连接配置文件中。当我尝试连接时,会出现一个对话框要求输入密码。我想在终端本身中执行此操作,因为我可以从脚本生成 TOTP。我就是想不出任何办法。有没有办法在命令行中指定密码或将密码从命令行发送到对话框?

答案1

您可以将密码写入并更新到单独的文件中。这对我来说很有效:

echo "vpn.secrets.password:MY_PASSWORD" > /my/vpn/password
nmcli con up uuid MY_UUID passwd-file /my/vpn/password

答案2

如果您需要使用脚本或类似程序创建密码,然后将其传递给 nmcli 而不将其存储在磁盘上,则以下方法对我(nmcli 1.30.0)有效,并且可以进行调整:

echo vpn.secrets.password:$PW | /usr/bin/nmcli c up $VPN_CON_NAME passwd-file /dev/fd/0

不幸的是它不支持标准 Linux 的标准-输入......

答案3

有一种更优雅、更安全的方法可以解决这个问题。将密码存储在 gnome-keyring 中:

~$ sudo apt install libsecret-tools
~$ secret-tool store --label='vpn' vpn_name your_unique_vpn_name

现在让我们编写一个脚本来启动 vpn。要提供的密钥可能有所不同。在我的示例中是vpn.secrets.cert-pass。脚本应放入~/bin/

#!/bin/sh -e

vpn=your_vpn_connections_name

tmp=$(mktemp)
chmod 600 $tmp
printf "vpn.secrets.cert-pass:$(secret-tool lookup vpn_name your_unique_vpn_name)">$tmp
nmcli c u "$vpn" passwd-file $tmp
rm $tmp

答案4

Ubuntu 14.04 中最新的网络管理器是 0.9.8.8,正如您所说,不支持该功能。接受密码的功能似乎已在 1.11.1-dev 中引入,至少在文档中是这样的。https://github.com/NetworkManager/NetworkManager/commit/b19e4d37b6272834cb98a000cfa7bc247607e2f7#diff-a86a2b799f258f5c584a76d830e845db

我还没有找到其他传递密码的方法,似乎需要更新网络管理器或更新 Ubuntu。

相关内容