我正在尝试编写一个调用另一个脚本的脚本。然后应填写用户名和密码。不幸的是,spawn没有调用我的脚本文件。
我创建了两个脚本,然后使用
chmod +x filename.sh
使其可执行。
vpn.sh
#! /usr/bin/expect
spawn ./startvpn.sh
#expect "[sudo] Passwort für niclas:"
#send "**********"
#expect "Enter Auth Username:"
#send '*************'
#expect "Enter Auth Password:"
#send "******"
startvpn.sh
#! /bin/bash
sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn
计划:
我正在终端上运行./vpn, 然后执行startvpn。 这将与Openvpn建立连接。
然后vpn.sh应该输入Sudo密码,然后输入我的NordVpn用户名和密码。
奇怪的是,startvpn永远不会运行。
我没有收到错误消息。
更新:
我更新了脚本。现在可以正常工作了,只是没有输入密码。
vpn.sh的更新版本
#!/usr/bin/expect -f
spawn sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn
expect "Passwort für niclas:"
send "******\r"
expect "Username:"
send "**************\r"
expect "Password:"
send "****\r"
控制台输出为:
niclas@niclas-Inspiron-7347:~$ expect vpn.sh
spawn sudo openvpn /etc/openvpn/ovpn_udp/se250.nordvpn.com.udp.ovpn
[sudo] Passwort für niclas:
Fri Jun 28 21:03:03 2019 OpenVPN 2.4.4 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on May 14 2019
Fri Jun 28 21:03:03 2019 library versions: OpenSSL 1.1.1 11 Sep 2018, LZO 2.08
Enter Auth Username: niclas.buerger@web.de
Enter Auth Password: niclas@niclas-Inspiron-7347:~$
如果我正常键入密码,它将用******填充。 所以我真的不知道为什么它不起作用。该命令与使用用户名的命令相同。
答案 0 :(得分:0)
expect "[sudo] Passwort für niclas:"
在“”引号内,[]将用作tcl命令的替换语法。
您需要像这样使用严格期望{}:
expect {[sudo] Passwort für niclas:}
或引用[],例如:
expect "\[sudo\] Passwort für niclas:"
或者只使用期望的字符串的一部分:
expect "Passwort für niclas:"
或者只是这个:
expect "Passwort"
答案 1 :(得分:0)
发送后您需要有另一条线路。这对我有用:
<块引用>#!/usr/bin/expect -f
生成 openconnect ********
期望“用户名:”
发送 -- "********\r"
期望“密码:”
发送 -- "****\r"
互动