咱們常常須要在 headless 環境下作一些事情,自動執行一些腳本。有時咱們須要 sudo
卻苦惱於它須要交互輸入密碼,那咱們應該怎麼辦?bash
echo <password> | sudo -S <command>
經過查閱 man sudo
,咱們發現有這個方案,-S, --stdin
表示從 stdin 讀取密碼。less
若是咱們但願一勞永逸,使某個用戶一直處於免密碼 sudo
的狀態,咱們能夠經過 sudo visudo
命令修改 /etc/sudoers
文件來實現。ui
user ALL=(ALL) NOPASSWD:ALL
格式爲:code
<user> <host>=(<sudo-as-user>) <allowed-commands> %<group> <host>=(<sudo-as-user>) <allowed-commands>
第一個是執行 sudo 的用戶,第二個是容許 sudo 的主機,等號後的括號內是容許 sudo 借用的目標用戶(通常是 root 或者 ALL),括號外是容許 sudo 的命令。class
NOPASSWD 是指無需密碼。require
但咱們仍然可能遇到錯誤,當發生 sudo: sorry, you must have a tty to run sudo
時,能夠 sudo visudo
而後註釋掉 Defaults requiretty
行解決。command