2010-04-16 12 views
39

我想用密碼保護程序的執行。如何讓bash腳本要求輸入密碼?

如何在bash中做到這一點?

+1

投票結束時不清楚,請指定您希望密碼輸入的方​​式與其他輸入不同。沒有呼應問:http://stackoverflow.com/questions/3980668/how-to-get-a-password-from-a-shell-script-without-echoing – 2016-06-29 21:26:03

回答

48
stty_orig=`stty -g` # save original terminal setting. 
stty -echo   # turn-off echoing. 
read passwd   # read the password 
stty $stty_orig  # restore terminal setting. 
73

該命令將讀入變種PWD從stdin(與回波禁用):

IFS= read -s -p Password: pwd 

取消設置IFS將允許前緣和後在密碼空白(這在一些環境中支持,因此最好在您的腳本輸入用戶憑據期間支持它)

要驗證前導/尾隨空白處理是否正確,您可以使用:

echo -n "$pwd" | hexdump -C 

注意:不要使用真正的密碼,因爲它會轉儲到控制檯!

HT:Ron DuPlain有關IFS未定位的更多信息。

+3

如果我用這個而不是接受答案? – Triztian 2012-10-19 01:46:24

+7

@Triztian是的,上述可能只適用於Bash。接受的答案應該適用於大多數(所有?)炮彈。 – jberryman 2012-10-22 14:53:57

4

如果您需要獲取passwd以作爲參數提供給程序,那麼請使用unicorns建議來關閉回聲。
在腳本中進行passwd檢查不起作用 - 如果用戶可以執行bash腳本,他們也有權讀取它並查看密碼。

如果您只想讓擁有passwd的人運行程序,那麼安全的方法是創建一個擁有該程序的新用戶帳戶,並使用'sudo'腳本以該用戶身份運行程序 - 它會以安全的方式提示用戶密碼。

+1

可能會預先計算密碼的校驗和,並將其存儲在腳本中而不是明文中,並根據輸入的校驗和來測試。儘管如此,它仍然可以被打破,但不那麼容易。 – 2010-04-16 18:11:29

+1

在這種情況下,您只需簡單地將腳本複製到您有寫入權限的地方,然後取消檢查。 – 2010-04-16 18:21:56