Cara membuat sudo tidak kadaluarsa saat skrip berjalan [duplikat]
Saya terkadang perlu menjalankan skrip selama berjam-jam, di mana beberapa perintah perlu sudo
. Namun, jika saya tidak memeriksa dan memasukkan kembali sudo
kata sandi secara berkala, saya mendapatkan sudo: timed out reading password
kesalahan yang terkadang merusak semuanya. Saya tidak ingin menggunakan sudo myscript.sh
karena beberapa perintah harus dijalankan tanpa sudo
.
Saya ingin sudo
kata sandi yang di-cache tetap ada untuk skrip selama seluruh durasi skrip tanpa mengubah bagian sistem lainnya ( sudo
persistensi hanya untuk 1 skrip ini).
Apakah ada cara untuk membuatnya sudo
bertahan untuk seluruh durasi skrip dan hanya untuk 1 skrip?
Jawaban
Kemungkinan: jalankan skrip dengan sudo myscript.sh
. Di dalam skrip, jalankan perintah yang harus dijalankan tanpa sudo
cara 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 sudo
Anda mungkin menyukai atau tidak menyukai gagasan itu. Dalam pendekatan Anda saat ini, kode non-elevasi adalah default, baris dengan sudo
pengecualian 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.