Scripting
如何暫時禁用 sudo 憑據時間戳超時?
假設,我有以下 bash 腳本:
#!/bin/bash sudo command1 command2 sudo command3
我不想以
command2
root 身份執行,所以我不會使用sudo
. 因此,一旦我執行腳本,就會sudo command1
詢問我的密碼。不幸的是,command2
大約需要2個小時才能完成。所以 sudo 憑據時間戳超時,當腳本到達時sudo command3
,我再次提示輸入密碼。我不想完全永久禁用 sudo 憑據時間戳超時,例如https://superuser.com/a/149740中所述。我只想暫時禁用超時,有效地保留這個 bash 會話的憑據,直到它結束。
我認為您最好的選擇是刷新 sudo 時間戳的(後台)忙等待循環,然後在您不再需要
sudo
特權時將其殺死。這是一個範例腳本;它執行sleep 6
而不是你的兩個小時command2
,並執行可見/bin/echo
命令而不是command1
andcommand2
:#!/bin/sh sudo /bin/echo command 1 while :; do sudo -v; sleep 1; done & infiloop=$! sleep 6 sudo /bin/echo command 3 kill "$infiloop"
對於您的實際腳本,我建議使用更寬鬆的循環:
#!/bin/sh sudo command1 while :; do sudo -v; sleep 59; done & infiloop=$! command2 sudo command3 kill "$infiloop"
sleep 59
根據timestamp_timeout
sudoers 中的現有設置調整口味;我選擇 59 只是為了展示如果時間戳超時為 60 秒您可以做出的選擇。