我有一个安装并设置 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 的坚定的人会找到一种方法来获取他们想要的信息