如何使用linux expect脚本输入应答密码提示

时间:2013-06-20 16:54:40

标签: linux command-line expect

我在编写脚本时遇到一些麻烦,该脚本将启动我的forticlient vpn命令行客户端并在提示时发送我的密码。这是我的代码:

#!/usr/bin/expect -f
set loadme "./forticlientsslvpncli --server myvpnserver --vpnuser theuser
eval spawn $loadme
expect "Password for VPN: "
send "password\r"

然而,它仍然提示输入vpn密码。我确信这很简单,我对linux脚本很新,但是非常感谢任何帮助!

谢谢!

4 个答案:

答案 0 :(得分:13)

#!/usr/bin/expect -f
set timeout -1
cd /usr/local/forticlientsslvpn
spawn ./forticlientsslvpn_cli --server myhost:10443 --vpnuser myuser
expect "Password for VPN:" {send -- "mypassword\r"}
expect "to this server? (Y/N)\r" {send -- "y\r"}

expect eof

答案 1 :(得分:2)

根据我从glenn jackman那里得到的评论,我能够发现密码提示没有匹配。我将第一行更改为#!/var/bin/expect -d,它提供了必要的调试输出以找出问题并进行修复。

谢谢格伦!

答案 2 :(得分:0)

您的代码语法可能有误或者密码错误。所以你可以在期望的提示下尝试它 - 逐行调试它。

答案 3 :(得分:0)

您可以使用forticlientsslvpn_cliExpect一起输入密码。

此处提供完整的解决方案:

https://gist.github.com/azizasm/e216bc47b54f5b68405f3c8f8b832e8a

注意:如果VPN断开连接,此解决方案将自动重新连接。