2011-11-13 89 views
7

我正在編寫一個簡單的shell腳本,用於更改網絡硬件的mac地址。 行之一是:Shell腳本調用sudo;我如何取消密碼提示

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

我的問題是使用sudo的腳本提示密碼。有沒有什麼辦法可以在不提示用戶輸入密碼的情況下做到這一點?

回答

8

最絕的,如果你不介意做特定的命令「免費使用」針對特定用戶:

見基本上我對方的回答在這裏:Shell script - Sudo-permissions lost over time

可能工作的最簡單的事情是

myuser = NOPASSWD: /sbin/ifconfig 

此外,您可以須藤相同的終端(TTY/VTY)上的任意命令,sudo將緩存一段時間的認證(或直到sudo -k),因此您可以啓動該腳本,它將'記住'早期的sudo調用的憑據。與sudo撰寫管道時,我有時會這樣(只是之前他們sudo true

+0

你是否在sudoers文件中指的是類似於用戶名ALL = NOPASSWD:/ sbin/ifconfig的東西?我確實嘗試過,但不起作用 –

+1

是的。你有(1)包括空格(2)使用'sudoedit'(或'visudo')嗎?另外,我完全不建議使用ALL來輸入密碼。**警告**除了「祝福」工具(比如'visudo')*之外的其他任何東西*將在您搞亂sudoers文件時使您的系統無法使用(除非您有root密碼來重新修復) – sehe

+0

@sehe I agree ,使用ALL很危險。 – Tilo

1

你需要一個sudo配置線,允許通過無密碼提示用戶要執行的命令。

您可以禁用密碼提示整整用戶(更危險,但也許OK,如果你是桌面上的唯一用戶 - 不這樣做的服務器上):

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/

+0

我試過了,而且我似乎遇到了新的錯誤sudo:解析/ etc/sudoers在第18行附近的錯誤。sudo:找不到有效的sudoers源代碼,嘗試編輯sudoers文件時退出。我現在該怎麼做? –

+0

這意味着你的/ etc/sudoers文件的第18行有語法錯誤 - 你需要修復該錯誤或將其註釋掉 – Tilo

+0

你可以將/ etc/sudoers文件中的行添加到你的問題中嗎?另外:檢查我在Ubuntu論壇提到的鏈接 – Tilo

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

雖然這會起作用,但它是令人難以置信的不安全。 首先,他們可以從包含命令的腳本中讀取密碼。其次,密碼將被存儲在諸如shell歷史等地方。 作爲一般規則,切勿在命令行上輸入密碼。讓程序提示它。 對於您的特定用例,最佳選擇是在執行ifconfig命令時編輯shudders文件以不需要密碼。 –

0

一個更安全的方式做到這一點是:

sudo visudo -f sudoers 

再加入

myuser ALL=NOPASSWD:/sbin/ifconfig 

到出現在編輯器窗口。一旦你完成,使用:x退出

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 
相關問題