我正在编写一个简单的shell脚本来更改网络硬件的mac地址。 其中一条是:
sudo ifconfig eth0 hw ether 00:99:99:00:00:00
我的问题是sudo脚本提示输入密码。有没有办法在不提示用户输入密码的情况下做到这一点???
答案 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 sudoers
,man 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