Komut dosyası çalışırken sudo'nun süresinin dolmaması nasıl yapılır [duplicate]

Dec 22 2020

Bazen bir komut dosyasını saatlerce çalıştırmam gerekir, bu sırada bazı komutlar gerekir sudo. Ancak, sudodüzenli aralıklarla şifreyi kontrol edip tekrar girmezsem, sudo: timed out reading passwordbazen her şeyi bozan hatayı alıyorum. sudo myscript.shKomutların bazıları olmadan çalıştırılması gerektiğinden kullanmak istemiyorum sudo.

sudoÖnbelleğe alınan şifrenin, sistemin geri kalanını değiştirmeden komut dosyasının tüm süresi boyunca kalmasını istiyorum ( yalnızca bu 1 komut dosyası için sudokalıcılık ).

sudoSenaryo boyunca ve sadece 1 senaryo için dayanmanın bir yolu var mı ?

Yanıtlar

KamilMaciorowski Dec 22 2020 at 13:53

Olasılık: betiği ile çalıştırın sudo myscript.sh. Komut dosyasının içinde, sudobu yol olmadan çalıştırılması gereken komutları çalıştırın :

sudo -u "$SUDO_USER" foo args

(belki de tüm komut dosyasının onsuz çalıştırılması durumunda uygun mantıkla sudo). Kök kullanıcının kimlik doğrulaması yapması gerekmez sudove bu nedenle başka bir kullanıcı olarak bir komutu çalıştırmak için parola girmesi gerekmez .

Senaryonun ne kadar büyük olduğuna (ne kadar değiştirmeniz gerektiğine) ve her şeyi birlikte çalıştırma konusunda nasıl hissettiğinize sudobağlı olarak fikri beğenip beğenmeyebilirsiniz. Şu anki yaklaşımınızda yükseltilmemiş kod varsayılandır, sudoaçık istisnalar olan satırlar . Yaklaşımım bunu tersine çeviriyor. Komut dosyasını oluştururken ve test ederken daha dikkatli olmanız gerekir. Bunun en iyi uygulama olmadığını kabul ediyorum; yine de süresi dolma sorununu çözüyor sudo.

Şahsen ben bu çözümü çok karmaşık olmayan (basit döngü, birkaç komut) uzun süre çalışan bir betik için kullanırdım. Yine de karmaşık bir senaryoyu yeniden oluşturmadan önce iki kez düşünürdüm.


Diğer bir yaklaşım, arka planda önbelleğe alınmış kimlik bilgilerini periyodik olarak güncellemektir. Varsayılan olarak bunlar per tty'dir (bakın tty_tickets). Şu şekilde ilerleyin:

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

Artık ihtiyaç duyulmadığında arka plan işini durdurmayı unutmayın. Betiğin kendisi böyle bir işe başlayabilir; o zaman muhtemelen betikteki bazı tuzakların, betik sona erdiğinde işi otomatik olarak bitirmesini isteyeceksiniz.