【发布时间】:2014-03-28 06:59:52
【问题描述】:
我有以下代码:
read password1
echo "$password1" | sudo -Sk foo_bar
在执行 sudo 时,是否有任何方法可以检测身份验证是否失败(例如密码错误或用户不是 sudoer)?检查$? 的值不起作用,因为foo_bar 可能返回1,身份验证失败时sudo 也一样,如果密码错误或命令出错,我无法通知用户。
【问题讨论】:
我有以下代码:
read password1
echo "$password1" | sudo -Sk foo_bar
在执行 sudo 时,是否有任何方法可以检测身份验证是否失败(例如密码错误或用户不是 sudoer)?检查$? 的值不起作用,因为foo_bar 可能返回1,身份验证失败时sudo 也一样,如果密码错误或命令出错,我无法通知用户。
【问题讨论】:
您可以通过单独调用sudo 进行身份验证:
if ! echo "$password1" | sudo -Sv -p ''; then
echo "Authentication failed" >&2
else
sudo foo_bar
fi
请注意,如果 sudo 的身份验证超时已被禁用(即,如果 /etc/sudoers 中的 timestamp_timeout 设置为 0),此方法将失败。
【讨论】:
使用调试模式 -
#!/bin/bash -xv
-x 添加将在调试模式下显示每个语句。
或
在执行 Shell 脚本时,您可以使用以下行创建错误日志 -
./filename.sh > /path/to/error_log/backup.log 2>&1
您可以回显语句并了解语句的执行情况
【讨论】: