Bash 如何使用expect使用VPN登录

Bash 如何使用expect使用VPN登录,bash,expect,Bash,Expect,我是expect新手,我想使用expect登录到VPN。我已经从论坛上收集了一些代码,但是我仍然无法让它工作。它无法发送我的根密码。语法是否正确。下面是我手动运行以登录到 VPN。先谢谢你 sudo openvpn 'US California.ovpn' sudo] password for tony:password Enter Auth Username: user Enter Auth Password: password expect脚本: set vpnuser "user" s

我是expect新手,我想使用expect登录到VPN。我已经从论坛上收集了一些代码,但是我仍然无法让它工作。它无法发送我的根密码。语法是否正确。下面是我手动运行以登录到 VPN。先谢谢你

sudo openvpn 'US California.ovpn'
sudo] password for tony:password

Enter Auth Username: user
Enter Auth Password: password
expect脚本:

set vpnuser "user"
set vpnpassword "password"
set rootpassword "password9010"
spawn sudo openvpn 'US California.ovpn'
expect "*ssword: " 
send "$rootpassword\r" #mysetver password to login as root
expect "Enter Auth Username:\r:"
send "$vpnuser"
expect "Enter Auth Password:\r"
send "$vpnpassword"

如果这是您得到的提示:

sudo openvpn 'US California.ovpn'
sudo] password for tony:password

Enter Auth Username: user
Enter Auth Password: password
那么你在产卵后的预期是错误的,因为上面也为tony写了
您需要编写
expect“*密码*:”

类似地,您应该编写其他expect,如下所示:
expect“输入身份验证用户名:”
无需放置\r: 阿尔索
expect“输入身份验证密码:”

因此,代码变成:

set vpnuser "user"
set vpnpassword "password"
set rootpassword "password9010"
spawn sudo openvpn 'US California.ovpn'
expect "*password*:" 
send "$rootpassword\r" #mysetver password to login as root
expect "Enter Auth Username: "
send "$vpnuser\r"
expect "Enter Auth Password: "
send "$vpnpassword\r"

希望这对autoexpect有帮助。运行
autoexpect sudo openvpn'US California.ovpn'
并将生成的脚本与您已有的脚本进行比较。@paninidicuaro:如果在发送根密码之前先休眠1秒会发生什么?谢谢用户1934428这是非常有用的信息。我能够从生成的文件中获得一些语法。例如,我将“US California.ovpn”更改为{US California.ovpn},我不再收到错误消息。谢谢你,Tarique你的示例帮助了我。由于某种原因,当它不想发送我的密码时,我不得不执行以下操作。知道为什么``expect'输入身份验证密码吗:“睡眠5发送”$vpnpassword\r“发送--”D“expect-exact”send--“a”expect-exact“发送--”t“expect-exact”send--“a”expect-exact“发送--”1“expect-exact”send--“2”expect-exact”