Bash脚本。输入用户名和密码

时间:2019-06-19 18:03:45

标签: bash shell expect

我正在尝试编写一个调用另一个脚本的脚本。然后应填写用户名和密码。不幸的是,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:~$   

如果我正常键入密码,它将用******填充。 所以我真的不知道为什么它不起作用。该命令与使用用户名的命令相同。

2 个答案:

答案 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"

互动