重新验证用户以 sudo 身份运行脚本,而无需多个密码提示

重新验证用户以 sudo 身份运行脚本,而无需多个密码提示

我正在尝试编写一个脚本来自动登录 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 密码会更容易吗?

相关内容