Scripting

如何暫時禁用 sudo 憑據時間戳超時?

  • February 16, 2021

假設,我有以下 bash 腳本:

#!/bin/bash
sudo command1
command2
sudo command3

我不想以command2root 身份執行,所以我不會使用sudo. 因此,一旦我執行腳本,就會sudo command1詢問我的密碼。不幸的是,command2大約需要2個小時才能完成。所以 sudo 憑據時間戳超時,當腳本到達時sudo command3,我再次提示輸入密碼。

我不想完全永久禁用 sudo 憑據時間戳超時,例如https://superuser.com/a/149740中所述。我只想暫時禁用超時,有效地保留這個 bash 會話的憑據,直到它結束。

我認為您最好的選擇是刷新 sudo 時間戳的(後台)忙等待循環,然後在您不再需要sudo特權時將其殺死。這是一個範例腳本;它執行sleep 6而不是你的兩個小時command2,並執行可見/bin/echo命令而不是command1and command2

#!/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_timeoutsudoers 中的現有設置調整口味;我選擇 59 只是為了展示如果時間戳超時為 60 秒您可以做出的選擇。

引用自:https://unix.stackexchange.com/questions/513411