スクリプトの実行中にsudoが期限切れにならないようにする方法

スクリプトの実行中にsudoが期限切れにならないようにする方法

時々スクリプトを実行する必要がある場合がありますが、その間にいくつかのコマンドが必要です。ただし、定期的にパスワードをsudo確認して再入力しないと、プロセス全体が中断されるエラーが発生します。一部のコマンドを実行する必要があるため、使用したくありません。sudosudo: timed out reading passwordsudo myscript.shいいえ sudo

sudoシステムの残りの部分を変更せずに、スクリプト全体の期間にキャッシュされたパスワードをスクリプト内に保持したい(sudo永続性ただこの1スクリプトの場合)。

sudoスクリプト全体の期間中に最初のスクリプトでのみこれを行う方法はありますか?

ベストアンサー1

可能性:run scriptを使用してくださいsudo myscript.sh。このように実行してはいけないスクリプト内でコマンドを実行する場合sudo

sudo -u "$SUDO_USER" foo args

(スクリプト全体がなくても実行される場合は、正しいロジックがある可能性がありますsudo)。rootユーザーは認証する必要がないため、sudoパスワードを入力しなくても他のユーザーとしてコマンドを実行できます。

スクリプトのサイズ(変更する必要がある変更の数)とスクリプト全体の実行の感情に応じて、sudoこのアイデアが気に入ったり気に入らないことがあります。現在のアプローチでは、非ホイストコードはsudo明示的な例外を持つ基本行です。私のアプローチはその点を裏返します。スクリプトを作成してテストするときは、さらに注意が必要です。私はこれが最善の方法ではないことを認めます。それでも期限切れの問題を解決しますsudo

個人的に、私はあまり複雑ではありません(単純なループ、少数のコマンド)長期実行スクリプトにこのソリューションを使用します。しかし、複雑なスクリプトを書き換える前にもう一度考えてみましょう。


別のアプローチは、バックグラウンドでキャッシュされた資格情報を定期的に更新することです。デフォルトではこれはttyごとです(参照:tty_tickets)。次のように進んでください。

sudo -v                              # to enter your password once
while sleep 300; do sudo -v; done &  # adjust the interval if needed
myscript.sh

不要になったバックグラウンドタスクを終了することを忘れないでください。スクリプト自体がこれらのタスクを開始できます。その後、スクリプトが終了したときにジョブを自動的に終了するようにスクリプト内のいくつかのトラップを使用することができます。

おすすめ記事