Shell脚本调用sudo;如何禁止密码提示

时间:2011-11-13 13:01:55

标签: linux shell sudo

我正在编写一个简单的shell脚本来更改网络硬件的mac地址。 其中一条是:

sudo ifconfig eth0 hw ether 00:99:99:00:00:00

我的问题是sudo脚本提示输入密码。有没有办法在不提示用户输入密码的情况下做到这一点???

5 个答案:

答案 0 :(得分:8)

最明确的是,如果您不介意为该特定用户“免费使用”该特定命令:

在此基本上看到我的另一个答案:Shell script - Sudo-permissions lost over time

最简单的方法是

myuser = NOPASSWD: /sbin/ifconfig

此外,你可以在同一个终端(tty / vty)上发出任意命令,sudo会暂时缓存身份验证(或直到sudo -k),所以你可以启动脚本,它将“记住”早期sudo调用的凭据。我有时会在使用sudo组合管道时(在sudo true之前)

答案 1 :(得分:3)

echo "password" | sudo -S ifconfig eth0 hw ether 00:99:99:00:00:00

答案 2 :(得分:2)

您需要一个sudo配置行,允许用户在没有密码提示的情况下执行该命令。

您可以为整个用户禁用密码提示(更危险,但如果您是桌面上的唯一用户,则可能没问题 - 不要在服务器上执行此操作):

yourusername  ALL=(ALL) NOPASSWD: ALL

或更严格,仅允许ifconfig命令:

yourusername  ALL= NOPASSWD: /sbin/ifconfig

请参阅:man sudoersman sudo

http://ubuntuforums.org/showthread.php?t=1132821

http://www.linuxhelp.net/guides/sudo/

答案 3 :(得分:0)

更安全的方法是:

sudo visudo -f sudoers

然后添加

myuser ALL=NOPASSWD:/sbin/ifconfig

到出现的编辑器窗口。完成后,使用:x退出

答案 4 :(得分:0)

这是一个Zenity对话框,类似于Tman的评论 虽然密码没有存储在历史记录中...... 这可能是一个不错的选择

#!/bin/bash
ENTRY=`zenity --password`
case $? in
0)
pw=$(echo $ENTRY | cut -d'|' -f1)
;;
1)
echo "Stop login.";;
-1)
echo "An unexpected error has occurred.";;
esac
TMP=$(echo "${pw}" | sudo -Sv)
TMP=0