我正在编写一个简单的shell脚本,用于更改网络硬件的MAC地址。
其中一行是:
sudo ifconfig eth0 hw ether 00:99:99:00:00:00
我的问题与sudo有关,脚本提示输入密码。有没有什么方法可以在不提示用户输入密码的情况下完成操作?
如果您不介意让特定用户免费使用该特定命令,那么最肯定是:
请参考我在这里给出的其他答案:Shell脚本-Sudo权限随时间丢失
可能可行的最简单的方法是:
myuser = NOPASSWD: /sbin/ifconfig
echo "password" | sudo -S ifconfig eth0 hw ether 00:99:99:00:00:00
sudo
配置行,允许用户执行该命令而无需输入密码。你可以为整个用户禁用密码提示(这样做更加危险,但如果你是桌面上唯一的用户,可能还可以接受——在服务器上绝不要这样做)。yourusername ALL=(ALL) NOPASSWD: ALL
或者更加严格,仅允许使用ifconfig命令:
yourusername ALL= NOPASSWD: /sbin/ifconfig
man sudoers
,man sudo
http://ubuntuforums.org/showthread.php?t=1132821
http://www.linuxhelp.net/guides/sudo/
su -
成为 root 用户,然后输入 root 密码...接着编辑 sudoers 文件。 - Tilo
sudo visudo -f sudoers
myuser ALL=NOPASSWD:/sbin/ifconfig
打开编辑器窗口后,完成操作后使用:x
退出。
这里有一个类似于Tman评论的Zenity对话框,
尽管密码不会存储在历史记录中...
这可能是一个很好的替代方案
#!/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
sudoedit
(或visudo
)?此外,我完全不建议使用ALL来进行无密码授权。警告 除了“神圣”的工具(如visudo
)之外的任何其他工具,在您搞砸sudoers文件时都会使您的系统无法使用(除非您有root密码来修复问题)。 - sehesudo
要求输入密码,而是打印错误信息,请使用-n
。 - gitaarik