Yanıtlar:
Sorun sudo -sherhangi bir argüman olmadan kök için interaktif bir kabuk açılacaktır.
Yalnızca tek bir komutu kullanarak çalıştırmak istiyorsanız sudo -s, şunları yapabilirsiniz:
sudo -s command
Örneğin :
$ sudo -s whoami
root
Veya burada dizeleri kullanabilirsiniz:
$ sudo -s <<<'whoami'
root
Birden fazla komutunuz varsa, burada kullanabilirsiniz doc:
$ sudo -s <<'EOF'
> whoami
> hostname
> EOF
root
something--
Başka bir yol, tam bir bash komutunu / komutlarını şu noktalara iletmek olacaktır sudo:
#!/bin/bash
sudo bash -c 'command1; command2; command3;'
Bununla birlikte, komut dosyasını bununla başlatmak daha iyi bir yol olacaktır sudo. sudoSenaryonun içinde olmak çok iyi bir fikir değil . Tüm betiği kök ayrıcalıklarıyla ( sudo script.sh) çalıştırmak daha iyi . Gerekirse, sudobelirli komutların ayrıcalıklarını bırakmak için kullanabilirsiniz . Örneğin:
#!/usr/bin/env bash
whoami
echo $HOME
sudo -u terdon whoami ## drop privileges for specific command.
Yukarıdaki komut dosyasını çalıştırmak şunu döndürür:
$ sudo ~/scripts/a.sh
root
/root
terdon
Bourne kabuğu bir sahiptir -cgibi bir şey yazmak, böylece sen kabuğuna keyfi bir komut dosyası geçmek için kullanabilirsiniz bayrağı
sudo sh -c 'something'
Bununla birlikte, bu sadece en basit komutlar için yararlıdır, çünkü komut dosyasını doğru bir şekilde alıntılamak çok zahmetlidir ve komutu ssh üzerinden uzak bir sunucuya gönderirseniz rahatsızlık daha da yüksektir, çünkü argüman komut dosyası bir kez yanda iki kez analiz edilir betiği göndermek ve betiği çalıştıran tarafta bir kez.
Eğer somethingkarmaşık bir komut dosyası veya bir geçti gereken ssh hattı, bir fonksiyon yazmak için genel bir uygulamadır prepare_something_scriptiş komut dosyası 'şey' yazmaktır Stdout'a . En basit haliyle, bu işlev çıktısını oluşturmak için bir burada-belge kullanabilir:
prepare_something_script()
{
cat <<EOF
something
EOF
}
Tarafından üretilen komut dosyası prepare_something_scriptdaha sonra sudo tarafından verilen ayrıcalıklarla yerel olarak yürütülebilir :
prepare_something_script | sudo sh
Komut tarafından verilen ayrıcalıklarla uzaktan yürütülmelidir senaryoda sudo bunun standart girdinin önlemek için tabanın 64 kodlamayı gelenektir ssh bu gibi:
something64=$(prepare_something_script | base64)
ssh usesr@remote-host "echo ${something64} | base64 --decode | sudo sh"
Bu kodu bir işlevde kullanırsanız, something64 değişkenini yerel olarak işaretlemeyi unutmayın . Base64'ün bazı uygulamaları, -dkod çözme için ayrıntılı bir bayraktan daha az desteklenen bir bayrak sunar --decode. Bazı uygulamalar, -w 0sahte satır kesmelerini önlemek için kodlama komutuna bir ek eklemeyi gerektirir .
sudo -solması durumunda kullanmak iyi değildirroot. Bu,sudo shhangi kabuğun kullanılacağını açıkça belirten şey olmalıdır.