當前位置: 首頁>>技術教程>>正文


如何避免被sudo提示輸入密碼?

, , ,

問題描述

我知道我可以通過su命令成為root(超級用戶),但我必須在輸入命令後對其進行授權。有沒有辦法讓我成為root並在一行中授權(使用密碼)

最佳解決辦法

嗯,我唯一能想到的是

echo 'password' | sudo -S command

-S標誌使sudo從標準輸入讀取密碼。如man sudo中所述:

-S, –stdin

Write the prompt to the standard error and read the password from the standard input instead of using the terminal device. The password must be followed by a newline character.

那麽,要使用sudo權限運行ls,你會這樣做

echo 'password' | sudo -S ls

請注意,如果您的sudo訪問令牌處於活動狀態,如果您不需要輸入密碼,則會產生錯誤,因為您最近已經這樣做了。要解決此問題,您可以使用-k重置訪問令牌:

echo 'password' | sudo -kS ls

我不知道有什麽辦法讓你進入一個真正的root shell(如susudo -i)。這可能足以滿足您的需求。

次佳解決辦法

在終端運行visudo命令來編輯sudoers文件:

sudo visudo

並將以下行添加到sudoers列表中

username ALL = NOPASSWD : ALL

注意:將用戶名替換為上一行中的真實用戶名。

第三種解決辦法

echo 'password' | sudo -kS ls解決方案有效,但它有一些安全方麵的缺點,其中大部分已在terdon的回答評論中提到過。因此,我想提出一個不同的方法:

如果它隻是您經常需要執行的一個命令,例如apt-get upgrade,您可以配置您的係統,使sudo someCommand不需要密碼。

為此,請運行visudo並輸入類似於以下內容的內容:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

請注意,如果輸入不帶參數的命令(例如,在此示例中沒有upgrade),則允許用戶使用任何參數運行它,因此請小心使用。

第四種辦法

你也可以這樣做:

sudo -S <<< "password" command

第五種辦法

您可以增加超時,而不是完全刪除密碼,因此您隻需每天輸入幾次;在終端中,運行:

sudo visudo

在文件末尾,添加以下行以設置超時30分鍾(用您的用戶名替換jsmith)。

Defaults:jsmith timestamp_timeout=30

你可以使用你想要的任何數字; -1表示沒有超時(僅在第一次提示時),而0表示即時超時(每次sudo時都會提示)。默認超時為5分鍾。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/1342.html,未經允許,請勿轉載。