我正在尝试编写一个脚本来自动登录 OpenVPN 配置。我已经成功地实现了单次登录的自动化,如下所示:
#!/bin/bash
cd filepath/
username= "username"
password= "password"
read -sp "Enter Sudo Password: " sudopassword
/usr/bin/expect << EOF
spawn sudo openvpn config-file.ovpn
expect "password for $USER: "
send "$sudopassword\r"
expect "Enter Auth Username: "
send "$username\r"
expect "Enter Auth Password: "
send "$password\r"
expect "$ "
EOF
我将其保存为单个 shell 脚本。然后我只是运行:
./killvpn
从单独的 .sh 文件中确保先前的 VPN 连接已终止:
#!/bin/bash
sudo pkill vpn
到目前为止,我的脚本从一个单独的目录开始,并调用这些脚本来执行操作,如下所示:
## Project Folder is called: VPN ##
## Filepath: VPN/ ##
#!/bin/bash
./login1.sh
sleep 30m
./killvpn
echo " "
echo "Logging in to VPN2"
echo " "
./login2.sh
sleep 30m
等等。我的 ./login2.sh 文件与 ./login1.sh 相同,但是我删除了以下部分:
read -sp "Enter Sudo Password: " sudopassword
和:
expect "password for $USER: "
send "$sudopassword\r"
然而,./login2.sh 在启动时仍然提示我输入 sudo 密码,尽管主脚本已准备好并已被授予 root 权限。这使得脚本无法使用,因为如果我不在开放终端中监控它,我的 VPN 连接就会关闭。
有人可以检查一下这段代码,并告诉我如何在没有 sudo 提示的情况下运行 ./login2.sh ,并帮助我确定哪里出了问题吗?
答案1
使用 sudo 时删除密码要求的最简单方法(无需更改脚本)是在 /etc/sudoers 中使用“nopasswd”定义用户权限:
myuser ALL=(ALL:ALL) NOPASSWD:ALL
这将允许用户“myuser”以 root 身份运行任何命令,而无需提示输入密码。
(记住使用“visudo”命令来更改 sudoers 文件,而不是直接编辑它)。
答案2
只运行 sudo ./yourScript.sh 并且不再提示输入 sudo 密码会更容易吗?