sudo資格情報タイムスタンプタイムアウトを一時的に無効にする方法は?

sudo資格情報タイムスタンプタイムアウトを一時的に無効にする方法は?

次のbashスクリプトがあるとしましょう。

#!/bin/bash
sudo command1
command2
sudo command3

command2私はrootとして実行したくないのでsudosudo command1残念ながら、command2完了するのに約2時間かかります。したがって、sudo資格情報のタイムスタンプがタイムアウトしてスクリプトが到着すると、sudo command3パスワードを再入力するように求められます。

で説明されているように、sudo資格情報のタイムスタンプタイムアウトを完全に無効にしたくありません。https://superuser.com/a/149740例えば。タイムアウトを一時的に無効にして、このbashセッションが終了するまでそのセッションの資格情報を効果的に維持したいと思います。

ベストアンサー1

sudo最善の選択肢は、sudoタイムスタンプを更新し、権限が不要になったときに終了する(バックグラウンド)忙しい待機ループだと思います。以下は、sleep 6two hourの代わりに実行され、代わりに表示されるコマンドをcommand2実行するサンプルスクリプトです。/bin/echocommand1command2

#!/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 59sudoersの既存の設定に基づいてフレーバーを調整しますtimestamp_timeout。タイムスタンプのタイムアウトが60秒の場合、選択できる方法を示すために59を選択しました。

おすすめ記事