Bir şifre geçen SSH üzerinden sudo, tty gerekmez:
Sudo üzerinde sudo üzerinden ssh'yi, sudo'ya etkileşimli bir parola gerektirmemesini ve stdin'den parola almasını söyleyerek sözde (ssh "-t" anahtarını kullanmadan) kullanmaya zorlamadan kullanabilirsiniz. Bunu sudo'daki "-S" anahtarını kullanarak yaparsınız. Bu, sudo'yu stdin'de parolayı dinletir ve yeni satır gördüğünde dinlemeyi durdurur.
Örnek 1 - Basit Uzaktan Komut
Bu örnekte, basit bir whoami
komut göndeririz :
$ ssh user@server cat \| sudo --prompt="" -S -- whoami << EOF
> <remote_sudo_password>
root
Sudo'ya bilgi istemediğini ve girdisini stdin'den almamasını söylüyoruz. Bu, sudo şifresini tamamen sessiz hale getirir, böylece geri aldığınız tek yanıt çıktıdır whoami
.
Bu teknik, kendilerini stdin girişi gerektiren sudo üzerinden sudo üzerinden program çalıştırmanıza izin verme avantajına sahiptir. Bunun nedeni sudo'nun stdin'in ilk satırı boyunca parolayı tüketmesi ve daha sonra çalıştırdığı programın stdin'i yakalamaya devam etmesidir.
Örnek 2 - Kendi stdin'ini Gerektiren Uzaktan Komut
Aşağıdaki örnekte, "cat" uzak komutu sudo üzerinden yürütülür ve uzak kedinin görüntülenmesi için stdin aracılığıyla bazı ekstra satırlar sağlıyoruz.
$ ssh user@server cat \| sudo --prompt="" -S -- "cat" << EOF
> <remote_sudo_password>
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
Çıktı, <remote_sudo_password>
hattın sudo tarafından tüketildiğini ve uzaktan yürütülen kedinin ekstra satırları gösterdiğini gösterir.
Bunun faydalı olacağına bir örnek, komut satırını kullanmadan ayrıcalıklı bir komuta şifre geçirmek için ssh kullanmak istiyorsanız. Diyelim ki, ssh üzerinden uzak şifreli bir kapsayıcı bağlamak istiyorsanız.
Örnek 3 - Uzak VeraCrypt Kabı Takma
Bu örnek komut dosyasında, bir VeraCrypt kapsayıcısını sudo aracılığıyla ek bilgi metni olmadan uzaktan monte ediyoruz:
#!/bin/sh
ssh user@server cat \| sudo --prompt="" -S -- "veracrypt --non-interactive --stdin --keyfiles=/path/to/test.key /path/to/test.img /mnt/mountpoint" << EOF
SudoPassword
VeraCryptContainerPassword
EOF
Yukarıdaki tüm komut satırı örneklerinde (komut dosyası dışındaki her şeyde) << EOF
komut satırındaki yapının, parola dahil olmak üzere her şeyin yerel makinenin .bash_history dosyasına kaydedilmesine neden olacağı unutulmamalıdır . Bu nedenle, gerçek dünya kullanımı için ya tamamen yukarıdaki bir veracrypt örneği gibi bir komut dosyası aracılığıyla kullanmanız ya da komut satırında parolayı bir dosyaya koymanız ve bu dosyayı ssh üzerinden yönlendirmeniz önerilir.
Örnek 1a - Yerel Komut Satırı Parolası Olmayan Örnek 1
İlk örnek böylece:
$ cat text_file_with_sudo_password | ssh user@server cat \| sudo --prompt="" -S -- whoami
root
Örnek 2a - Yerel Komut Satırı Parolası Olmayan Örnek 2
ve ikinci örnek:
$ cat text_file_with_sudo_password - << EOF | ssh va1der.net cat \| sudo --prompt="" -S -- cat
> Extra line1
> Extra line2
> EOF
Extra line1
Extra line2
Komut dosyasının içeriği geçmişinizde bulunmadığından, her şeyi bir komut dosyasına koyarsanız, parolayı ayrı bir dosyaya koymak gereksizdir. Yine de, parolayı görmemesi gereken kullanıcıların komut dosyasını yürütmesine izin vermek istemeniz durumunda yine de yararlı olabilir.
ssh <user@server> sudo <script>
, böyle bir şey denerken çalışmadığıydısudo: no tty present and no askpass program specified