Linux

在安裝腳本期間臨時增加 sudo 的超時時間

  • February 21, 2017

我正在嘗試編寫一個腳本來安裝一堆軟體,我不想執行所有的東西root,所以我希望能夠提示輸入密碼,然後繼續安裝,使用sudosu在我需要的時候獲得特權。

sudo -v在腳本開始時提示輸入密碼,然後稍後正常使用 sudo。這很好用,直到我進行一個接管超時的安裝。

我寧願不必永久增加超時。有沒有辦法只增加目前會話的 sudo 超時時間?

您可以設置一個在後台執行的循環以定期執行“sudo -v”,訣竅當然是讓循環在腳本終止時干淨地終止。所以兩個程序之間必須有某種類型的通信;tmp 文件對此很好,並且它們也可以在腳本執行後輕鬆清理。(無論如何,安裝腳本通常會這樣做。)

例如(刪除 ’echo’ 語句以使用它;這些只是顯示它“工作”):

#!/bin/bash
log=running_setup.txt
sudo_stat=sudo_status.txt

echo "========= running script $$ ========"
echo $$ >> $sudo_stat
trap 'rm -f $sudo_stat >/dev/null 2>&1' 0
trap "exit 2" 1 2 3 15

sudo_me() {
while [ -f $sudo_stat ]; do
 echo "checking $$ ...$(date)"
 sudo -v
 sleep 5
done &
}


echo "=setting up sudo heartbeat="
sudo -v
sudo_me

echo "=running setup=" | tee $log
while [ -f $log ]
do
echo "running setup $$ ...$(date) ===" | tee -a $log
sleep 2
done

# finish sudo loop
rm $sudo_stat

然後你會看到……(注意:pid 被放入 tmp 文件中,這樣你就可以輕鬆地殺死它。不過,這不是必需的):

$ ./do_it.sh
========= running script 6776 ========
=setting up sudo heartbeat=
[sudo] password for user: 
=running setup=
checking 6776 ...Wed May  4 16:31:47 PDT 2011
running setup 6776 ...Wed May  4 16:31:48 PDT 2011 ===
running setup 6776 ...Wed May  4 16:31:50 PDT 2011 ===
running setup 6776 ...Wed May  4 16:31:52 PDT 2011 ===
checking 6776 ...Wed May  4 16:31:53 PDT 2011
running setup 6776 ...Wed May  4 16:31:54 PDT 2011 ===
<ctrl-c>  (cleans up files, then exits)

引用自:https://serverfault.com/questions/266039