我正在編寫一個簡單的shell腳本,用於更改網絡硬件的mac地址。 行之一是:Shell腳本調用sudo;我如何取消密碼提示
sudo ifconfig eth0 hw ether 00:99:99:00:00:00
我的問題是使用sudo的腳本提示密碼。有沒有什麼辦法可以在不提示用戶輸入密碼的情況下做到這一點?
我正在編寫一個簡單的shell腳本,用於更改網絡硬件的mac地址。 行之一是:Shell腳本調用sudo;我如何取消密碼提示
sudo ifconfig eth0 hw ether 00:99:99:00:00:00
我的問題是使用sudo的腳本提示密碼。有沒有什麼辦法可以在不提示用戶輸入密碼的情況下做到這一點?
最絕的,如果你不介意做特定的命令「免費使用」針對特定用戶:
見基本上我對方的回答在這裏:Shell script - Sudo-permissions lost over time
可能工作的最簡單的事情是
myuser = NOPASSWD: /sbin/ifconfig
此外,您可以須藤相同的終端(TTY/VTY)上的任意命令,sudo
將緩存一段時間的認證(或直到sudo -k
),因此您可以啓動該腳本,它將'記住'早期的sudo
調用的憑據。與sudo
撰寫管道時,我有時會這樣(只是之前他們sudo true
)
你需要一個sudo
配置線,允許通過無密碼提示用戶要執行的命令。
您可以禁用密碼提示整整用戶(更危險,但也許OK,如果你是桌面上的唯一用戶 - 不這樣做的服務器上):
yourusername ALL=(ALL) NOPASSWD: ALL
或更嚴格,只允許ifconfig命令:
yourusername ALL= NOPASSWD: /sbin/ifconfig
見:man sudoers
,man sudo
echo "password" | sudo -S ifconfig eth0 hw ether 00:99:99:00:00:00
雖然這會起作用,但它是令人難以置信的不安全。 首先,他們可以從包含命令的腳本中讀取密碼。其次,密碼將被存儲在諸如shell歷史等地方。 作爲一般規則,切勿在命令行上輸入密碼。讓程序提示它。 對於您的特定用例,最佳選擇是在執行ifconfig命令時編輯shudders文件以不需要密碼。 –
一個更安全的方式做到這一點是:
sudo visudo -f sudoers
再加入
myuser ALL=NOPASSWD:/sbin/ifconfig
到出現在編輯器窗口。一旦你完成,使用:x
退出
這裏是一個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
你是否在sudoers文件中指的是類似於用戶名ALL = NOPASSWD:/ sbin/ifconfig的東西?我確實嘗試過,但不起作用 –
是的。你有(1)包括空格(2)使用'sudoedit'(或'visudo')嗎?另外,我完全不建議使用ALL來輸入密碼。**警告**除了「祝福」工具(比如'visudo')*之外的其他任何東西*將在您搞亂sudoers文件時使您的系統無法使用(除非您有root密碼來重新修復) – sehe
@sehe I agree ,使用ALL很危險。 – Tilo