我的 vpnc 连接经常中断,我的朋友创建了一个脚本,它运行 vpnc,并运行另一个“保护”脚本,该脚本每分钟检查一次 vpnc 是否仍然连接,如果不是,则连接它。
我和我朋友的区别是,他有静态密码,我用小设备每次生成不同的密码。运行守卫脚本zenity
显示小窗口输入密码是没有问题的,问题是如何将这个密码传递给vpnc?
我在这里尝试过文档,如下所示:
PASS=`zenity --entry --title="VPN Password" --text="Enter your password:"`
sudo vpnc $SCRIPTPATH/vpnc.conf<<<$PASS
但这不起作用。Vpnc 一直在命令行上要求输入密码。我如何在脚本中输入密码?
答案1
您可以使用“expect”等待“密码:”提示并输入$PASS。
答案2
更详细地说,这是脚本的摘录:
#!/usr/bin/expect -f
set password [lrange $argv 1 1]
set timeout -1
match_max 100000
spawn /usr/sbin/vpnc --local-port 0 vpnc.conf
expect {
"Enter password for" {
send -- "$password\r"
}
}
send -- "\r"
interact
然后你可以像这样运行它
cat .passwd | xargs -n 1 expect-vpnc.exp
并且你的 .passwd 文件只包含一行密码