sudo
Sadece giriş kullanarak bir giriş kabuğu çağırmak için -i
. Komut belirtilmediğinde bir giriş kabuğu istemi alırsınız, aksi halde komutunuzun çıktısını alırsınız.
Örnek (giriş kabuğu):
sudo -i
Örnek (belirli bir kullanıcıyla):
sudo -i -u user
Örnek (bir komut ile):
sudo -i -u user whoami
Örnek (kullanıcının kullandığı yazıcı $HOME
):
sudo -i -u user echo \$HOME
Not: Ters eğik çizgi karakteri, dolar işaretinin hedef kullanıcının kabuğuna ulaşmasını ve arayan kullanıcının kabuğunda yorumlanmamasını sağlar.
Son örneği, tam olarak ne olduğunu söyleyen strace ile kontrol ettim . Çıktı fermanı, kabuğun --login
belirtilen bash komutuyla ve aynı bash çağrısında olduğu gibi çağrıldığını gösterir , ancak sudo da ayarlanması gibi kendi işini yapabilir $HOME
.
# strace -f -e process sudo -S -i -u user echo \$HOME
execve("/usr/bin/sudo", ["sudo", "-S", "-i", "-u", "user", "echo", "$HOME"], [/* 42 vars */]) = 0
...
[pid 12270] execve("/bin/bash", ["-bash", "--login", "-c", "echo \\$HOME"], [/* 16 vars */]) = 0
...
Kullandığınızı farkettim -S
ve bunun genellikle iyi bir teknik olduğunu düşünmüyorum. Komutları klavyeden doğrulama yapmadan farklı bir kullanıcı olarak çalıştırmak istiyorsanız, bunun yerine SSH kullanmak isteyebilirsiniz. localhost
Diğer ana bilgisayarlar için olduğu gibi çalışır ve etkileşimli bir girdi olmadan çalışan ortak anahtar kimlik doğrulaması sağlar.
ssh user@localhost echo \$HOME
Not: SSH sunucusu, SSH istemcisi tarafından erişilmek üzere her zaman bir giriş kabuğu oluşturduğundan, SSH ile herhangi bir özel seçeneğe ihtiyacınız yoktur.