我知道這對你們大多數人來說聽起來很天真,但我還是 Linux 新手,所以請耐心等待。
我正在嘗試創建一個批次檔以便自動執行一些命令。
這些命令之一是sudo -i
因為我需要存取根目錄中的一些檔案。
所以到目前為止我的腳本看起來像這樣:
#!/bin/bash
sudo -i
cd my-server/bin
./run-server.sh
我知道之後sudo -i
會提示輸入密碼,那麼我可以在腳本中模擬它嗎?
答案1
您可以取出sudo
腳本並確保使用者使用 呼叫腳本sudo scriptname
。
sudo -i
從腳本中刪除行並將其替換為:
# Must prefix with sudo when calling script
if ! [[ $(id -u) == 0 ]]; then
echo You must call this script using sudo. Aborting.
exit 99
fi
答案2
公平的問題。但強烈建議您不要按照您目前嘗試/設想的方式進行此操作。避免使用這種方法的原因是它需要將您的密碼輸入到其他使用者/攻擊者可以讀取的文字檔案中。現在,您可以將該檔案設定為600 權限,以便只能由您的使用者(和root)讀取,但我不確定腳本子命令是否可能記錄在某處,從而使您的密碼再次可供潛在攻擊者使用。我想真正的問題是,為什麼需要腳本自動以 root 身分登入?
這是一個自動化過程,還是有其他原因導致您無法簡單地回應按原樣運行腳本時出現的密碼提示?如果它是一個自動化過程,您應該簡單地刪除 sudo 行並將腳本呼叫新增到 root 使用者 cron 中。透過簡單的谷歌搜索,有大量關於如何設定 cron 作業的文檔,但您可以開始使用這)
此外,這是一個簡單地呼叫另一個腳本的腳本。您可能應該只讓 run-server.sh 只能由 root 執行,然後簡單地使用sudo su
登入 root,然後使用 .sh 運行它/my-server/bin/run-server.sh
。同樣,如果您需要按計劃自動執行它,您可以將其添加到根的 cron 中。
警告:不要編寫這個腳本,並且尤其不要在命令列上輸入它(它將被記錄)
echo 'PASSWORD' | sudo -S /my-server/bin/run-server.sh