How to use a linux expect script to enter answer a

2019-02-22 19:22发布

I am having some trouble writing a script that will launch my forticlient vpn command line client and send my password when it is prompted. Here is my code:

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

However, it still prompts for the vpn password. I am sure it is something simple and I am pretty new to linux scripting, but any help would be greatly appreciated!

Thanks!

4条回答
够拽才男人
2楼-- · 2019-02-22 19:32

You may use forticlientsslvpn_cli with Expect to feed in the password.

A complete solution available here:

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

Note: this solution will auto reconnect the if the VPN get disconnected.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-02-22 19:33

Your code syntax could be wrong or given password could be wrong. So you can try it on expect prompt - line by line to debug it.

查看更多
相关推荐>>
4楼-- · 2019-02-22 19:48

From the comment I got from glenn jackman I was able to figure out that the password prompt was not being matched. I changed my first line to #!/var/bin/expect -d which provided the necessary debugging output to find out the problem and fix it.

Thanks Glenn!

查看更多
贼婆χ
5楼-- · 2019-02-22 19:57
#!/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
查看更多
登录 后发表回答