Cara membuat sudo tidak kadaluarsa saat skrip berjalan [duplikat]

Dec 22 2020

Saya terkadang perlu menjalankan skrip selama berjam-jam, di mana beberapa perintah perlu sudo. Namun, jika saya tidak memeriksa dan memasukkan kembali sudokata sandi secara berkala, saya mendapatkan sudo: timed out reading passwordkesalahan yang terkadang merusak semuanya. Saya tidak ingin menggunakan sudo myscript.shkarena beberapa perintah harus dijalankan tanpa sudo .

Saya ingin sudokata sandi yang di-cache tetap ada untuk skrip selama seluruh durasi skrip tanpa mengubah bagian sistem lainnya ( sudopersistensi hanya untuk 1 skrip ini).

Apakah ada cara untuk membuatnya sudobertahan untuk seluruh durasi skrip dan hanya untuk 1 skrip?

Jawaban

KamilMaciorowski Dec 22 2020 at 13:53

Kemungkinan: jalankan skrip dengan sudo myscript.sh. Di dalam skrip, jalankan perintah yang harus dijalankan tanpa sudocara ini:

sudo -u "$SUDO_USER" foo args

(mungkin dengan logika yang tepat seandainya seluruh skrip pernah berjalan tanpa sudo). Pengguna root tidak perlu mengautentikasi sudo, dan karena itu tidak perlu memasukkan kata sandi untuk menjalankan perintah sebagai pengguna lain .

Bergantung pada seberapa besar skripnya (seberapa banyak Anda perlu mengubahnya) dan bagaimana perasaan Anda tentang menjalankan semuanya dengan sudoAnda mungkin menyukai atau tidak menyukai gagasan itu. Dalam pendekatan Anda saat ini, kode non-elevasi adalah default, baris dengan sudopengecualian eksplisit. Pendekatan saya membalikkan keadaan ini. Anda harus lebih berhati-hati saat membuat dan menguji skrip. Saya akui ini bukan praktik terbaik; tetap saja itu memecahkan masalah kedaluwarsa sudo.

Secara pribadi saya akan menggunakan solusi ini untuk skrip yang berjalan lama yang tidak terlalu rumit (loop sederhana, beberapa perintah). Saya akan berpikir dua kali sebelum membangun kembali skrip yang rumit.


Pendekatan lainnya adalah dengan memperbarui kredensial yang di-cache di latar belakang secara berkala. Secara default, ini adalah per tty (lihat tty_tickets). Lanjutkan seperti ini:

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

Jangan lupa untuk mematikan pekerjaan latar belakang jika tidak diperlukan lagi. Skrip itu sendiri dapat memulai pekerjaan tersebut; maka Anda mungkin ingin beberapa jebakan di skrip untuk menghentikan pekerjaan secara otomatis saat skrip berakhir.