OpenVPN。如何在脚本中提供交互式凭证

OpenVPN。如何在脚本中提供交互式凭证

我有一个安装并设置 VPN 然后连接到它的脚本:

apt install apt-transport-https
wget https://swupdate.openvpn.net/repos/openvpn-repo-pkg-key.pub
apt-key add openvpn-repo-pkg-key.pub
wget -O /etc/apt/sources.list.d/openvpn3.list https://swupdate.openvpn.net/community/openvpn3/repos/openvpn3-focal.list
apt update
apt install openvpn3
openvpn3 session-start --config profile-59.ovpn

当我在 Ubuntu 桌面上运行它时,它会以交互方式要求输入凭据: 在此处输入图片描述

如何调整脚本以传递凭据以避免交互式提示? 这样做的目的是让 Docker 容器自动连接到 VPN。

答案1

你可能想检查一下就像是expect,这将允许你做这样的事情:

spawn vpn_connect.sh
expect "Auth User name:"
send "protractor-container\r"
expect "Password:"
send "superSecretPassword!123\r"

当然,如果许多人能够连接到 Docker 容器或读取构建中打包的源文件,这可能并不理想,因为明文密码可能会产生问题。

一个选项是创建一个包含凭证的单独文件,并将其存储在 Docker 容器内的某个位置,例如/root/.private/vpn-creds。此文件仅包含两行:

protractor-container
superSecretPassword!123

然后你可以编辑你的expect脚本使其看起来像这样:

#!/usr/bin/expect -f

set passfile [open "/root/.private/vpn-creds" r]
gets $passfile username
gets $passfile password
close $passfile

spawn vpn_connect.sh
expect "Auth User name:"
send "$username\r"
expect "Password:"
send "$password\r"

请注意,如果每个人都有root访问权限,那么你无法以自动化方式隐藏凭据。一个sudo知道如何使用 StackExchange 的坚定的人会找到一种方法来获取他们想要的信息

相关内容