tek komut satırında şifre ile sudo?


115

Yoğun günlerde koşmak istiyorum

$ ./configure && make && sudo make install && halt

gece ve yatağa gitmek, uygulamanın otomatik olarak kurulmasını umarak. Ama ertesi gün gördüğüm şey, sudo'nun şifrenizi istediği ekran. Peki sudo'yu bir komut satırında parola ile nasıl çalıştırabilirim ya da bunu yapmak için başka bir yöntem var mı?


haltKök olarak koşman gerek .
Keith Thompson,

1
Does not sudo15 dakikalık zaman aşımı var? sudo lsParolanızı girip , söyleyemezseniz veya ona benzer bir şey yapamazsanız , daha sonra sudoaktif olarak ayrıcalıkları olan yukarıdaki komutu çalıştıramadınız mı? (Şu anda bunu test edemiyorum, aksi halde bunu bir cevap olarak gönderirim.)
Matt

1
Zaman aşımı açık sudoolarak yapılandırılabilir. Güvenlik bilinçli insanlar (benim gibi paranoyak, aka) sıfıra ayarladılar ... :-)
dda

Yanıtlar:


173

Evet, -SSTDIN'den şifreyi okuyan anahtarı kullanın :

$echo <password> | sudo -S <command>

Yani davanız için şöyle görünürdü:

$./configure && make && echo <password> | sudo -S make install && halt

Elbette <password>şifrenizle değiştirin .


42
Açıkçası, başka birinin şifresini kabuk tarihinde görmesi tehlikesi varsa, bunu çalıştırmak istemeyeceksiniz.
Brett Daniel,

Uzaktaki bir ana bilgisayarda ayrıcalıklı komutları çalıştırmak için hızlı yollar aramak ve bu teşekkürler.
nelaaro

13
'Echo <password> | kullanmaya karar verdiyseniz | sudo -S 'seçeneği, komut geçmişindeki şifreyi göstermemek için komutu SPACE karakteriyle başlatın. Elbette, en iyi seçenek şifreyi güvenli bir dosyadan aktarmaktır.
Shannon Haworth,

Eğer şifreyi bir $ VARIABLE (örneğin
sops ile sağlayabileceğiniz

9 yıl sonra ve hala bir cazibe gibi çalışır :)
WinEunuuchs2Unix

10

Komut satırınızı şununla değiştirebilirsiniz:

$sudo su

$./configure && make && make install && halt

Hemen şifrenizi girmeniz istenecek, ardından komutların geri kalanı süper kullanıcı olarak çalışacaktır.


8
bunun alternatif (ve muhtemelen tercih edilen) bir versiyonu:sudo sh -c "./configure && make && make install && halt"
quack quixote

2
Ancak oluşturulan tüm derleme dosyalarının süper kullanıcı izinleri olmaz mı? Bu, daha sonra düzenli bir kullanıcı olarak ./configure && make çalıştırmanızı önler.
kullanıcı45909

Evet, kullanıcı45909, oldukça haklısınız. Zaten ana paketin bir güncellemesini indirdikten sonra asla ./configure && make'i tekrar çalıştırmadım, ama muhtemelen tipik değilim.
CarlF 19

10

Diğer çözümlerin birçoğu, gereksiz yere çalıştırdıkları ./configureve makekök olarak dezavantajları vardır .

Bu biraz sarsılmış, ancak çalışması gerekir:

sudo sh -c "su $USER -c ./configure && su $USER -c make && make install && halt"

$USER(Kök olmayan) kabuk tarafından genişletilmesine izin vermek için çift ​​tırnak kullanıldığına dikkat edin.

Komuttan sleep 60önce bir tane de ekleyebilirim halt. Bazen böyle bir şey yaptım, komutun uzun süre çalışmasını bekledim, ama bir şeyler ters gidiyor ve derhal sona eriyor; sleepsistem kapanır önce bana komutu öldürmek sağlar. Veya shutdownbir zaman argümanı ile kullanabilirsiniz .


9

Ayrıca sudo'yu, visudokullanıcının parola olmadan make sudo olarak kullanmasına izin verecek şekilde yapılandırabilirsiniz .

User_Alias USERS = your_user
Cmnd_Alias CMDS = /usr/bin/make
USERS ALL = (ALL) NOPASSWD: CMDS

9

HISTIGNORE'ı " sudo -S " olarak ayarlayın

$ export HISTIGNORE='*sudo -S*'

Ardından şifrenizi güvenle sudo'ya iletin:

$ echo "your_password" | sudo -S -k <command>

"HISTIGNORE", bu komutu tarihe kaydetmemek anlamına gelir. Bu bellekteki veya "~ / .bash_history" dosyasındaki geçmiş.

Örneğin, aşağıdakiler, şifrenizin geçmişini tutmadan şifrenizi sudo komutuna güvenli bir şekilde aktaracaktır.

“-S”, şifre için stdin kullanmak anlamına gelir,

“-K”, sudo'yu her zaman sormaya zorlamak için önbelleğe alınmış bilgileri yok saymak anlamına gelir. Bu tutarlı davranış için.

$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -k whoami
$ echo "<your_password>" | sudo -S -k cat /etc/shadow
$ echo "<your_password>" | sudo -S -k bash /tmp/myscript.sh

Yukarıdaki yöntemin dezavantajı, daha sonra tarihte koştuğunuz komutları görmek isterseniz orada bulunmayacaklarıdır. Başka bir yöntem de sudo kimlik doğrulama kimlik bilgisi önbelleğini güncellemektir (varsayılan olarak 5 dakika zaman aşımı ile etkindir), ardından sudo'yu ayrı ayrı çalıştırın. Ancak bunun dezavantajı, 5 dakikalık önbellekten haberdar olmanız gerektiğidir.

Örneğin:

$ export HISTIGNORE='*sudo -S*'
$ echo "<your_password>" | sudo -S -v
$ sudo whoami
$ echo "<your_password>" | sudo -S -v
$ sudo cat /etc/shadow
$ echo "<your_password>" | sudo -S -v
$ sudo /tmp/myscript.sh

Not Her komuttan önce bir sudo koştum, sudo önbelleğinin güncellenmiş olduğundan emin olmak için varsayılan olarak 5 dakika. Evet, whoami 5 dakika sürmemelidir, fakat tutarlılık için her komuttan önce çalışmasını sağlayabilirim. "Export HISTIGNORE = ' sudo -S komutunu da ekleyebilirsiniz.'"~ / .bashrc dosyanızda, sonra yükleyin". ~ / .bashrc "veya logff sonra giriş yapın. Ancak, bunu komut dosyası amacıyla kullanmayı düşünüyorum, bu yüzden en iyi güvenlik uygulamaları için tüm komut dosyalarımın başında tutacağım." echo "ayarı | sudo -S -v "yerine bir değişkene de iyi bir fikir olabilir, daha sonra değişkeni kök ayrıcalıklarına ihtiyaç duyan her komuttan önce çalıştırın, Janar'ın yorumuna bakın." John T "nin yorumu da" -k "parametresini içermelidir "sanki" -k "olmadan" sudo -S "yi çalıştırıyorsanız ve sudo kimlik doğrulama önbelleği zaten sizin kimlik bilgilerinizi içeriyor (ve hala geçerliyse, varsayılan sudo kimlik doğrulama önbelleği 5 dakikadır), sonra bash parolanızı bir komut olarak çalıştırır; kötü.


1
Tarihte bulunmayan şeyler hakkında küçük bir not gibi, emrinizi önünde tek bir boşlukla çalıştırın. Bazı nedenlerden dolayı bu tarihin onu görmezden gelmesine neden olur.
Matt Fletcher,

4

Not, bu yöntemin sudo'nun eski bir sürümünde, özellikle de "Sudo sürüm 1.6.7p5" üzerinde çalışmadığını gördüm:

$ echo "<your_password>" | sudo -S -k whoami

Bu yöntem eski ve yeni sürümlerdeki sudo'da nerede çalışıyor:

$ echo "<your_password>" | sudo -S -v
$ sudo whoami

Bu asıl sorunun cevabı değil . Bir yazarın açıklamasını eleştirmek veya talep etmek için, yazdıklarının altında bir yorum bırakın; istediğiniz zaman kendi yazılarınıza yorum yapabilirsiniz ve yeterli saygınlık elde ettiğinizde , herhangi bir yayına yorum yazabilirsiniz .
DavidPostill

@Darren DeHaven: Burada sorulan soru için bunun nasıl bir cevap haline geldiğini açıklayabilir misiniz?
Renju Chandran chingath

4

Bunu da yapabilirsiniz:

sudo -S <<< "password" command

sadece bu benim için mac os'ta çalışıyor.
Mehdico

2

Daha fazla özen göstermek istiyorsanız, bir komut dosyası oluşturabilir, dosyanın izinlerini değiştirebilir, böylece yalnızca kök okuyabilir ve düzenleyebilir ve sonra çalıştırabilirsiniz.

Örnek:
1) Bir dosya oluşturun:

gedit ~/.easy.install  

2) Bunu yapıştırın ve kaydedin:

./configure && make && echo <password> | sudo -S make install && halt  

3) Çalıştırılabilir hale getirin:

sudo chmod +x ~/.easy.install  

4) Dosyanın izinlerini değiştirin, böylece sadece root onu okuyabilir ve düzenleyebilir:

sudo chmod 700 ~/.easy.install  

5) Çalıştır:

~/.easy.install  

Keyfini çıkarın ;-)


echo <password> işlem listesinde görünmeye devam eder ve birileri ps aux ile tam doğru anda şanslı olursa, şifreyi açık metin olarak görebilir. Şifreyi bir dosyaya kaydetmek ve dosyadan sudoya yönlendirmek için <kullanın.
bobpaul

1

Bu şekilde sudo ayarlamak, birinin sudo'nun hesabınızda şifre gerektirmediğini görmesi durumunda tehlikelidir. Ne yaptığını bilmiyorsan, yapma. Yerel A + Eğitim programımda deney bilgisayarımla çok defa oldum ... -_-

John T.’nin söylediği şeyler kulağa hoş geliyor, ancak şifrede kabuk geçmişinde parola bulma riski hala var. CarlF'ın söylediği şey daha iyi geliyor, ancak bir komut başarısız olursa, bilgisayar yine de süper kullanıcı ayrıcalıklarıyla çalışacaktır.


0

Şahsen ben John T 9 Kasım 09: 09'da 2: 47'de cevapladığı gibi ben de aynısını yapıyorum, ayrıca cevabını yönlendirdiği için madeni de geliştirdim, teşekkürler.

Farklılık, değişkenleri kullanma eğiliminde olduğumdur.

AutoSuDo=$" $echo pass | sudo -S";
# Change AutoSuDo to something else.
# Note that string starts with space,
# useful only if used as first command in line

Bu şekilde sudo yerine mayın değişkenini kolayca kullanabilirim.

$AutoSuDo apt-get update;

Bazı uzun senaryolarda bu oldukça kullanışlı oluyor. Bunları temel olarak korumak zorunda olduğum başkalarının kişisel bilgisayarları için kullanıyorum.

Ayrıca şunlara dikkat etmenizi de tavsiye ederim:

  • desgua cevabı 19 Nisan 1911 'de 23:56
  • user224306, 14 Mayıs 13: 17'de 17: 38'de, John T için 9 Kasım 099'da 2:47

0

Problem çözüldü. Örneğin, kullanıcı köküne:

echo -e 'password\npassword\n' | sudo passwd root

-E bayrağı ne yapar, @jerson Martinez?
kullanıcı674669

1
Echo için -e bayrağı, belirli dizileri özel anlamlara sahip olarak yorumlamasını sağlar.
Jerson Martínez
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.