sshpass ya da expect olmadan, betikten şifreli SSH

Bazı sunucular yalnızca şifreyle giriş kabul ediyor, bazı makinelerde de hiçbir şey kuramıyorsunuz. OpenSSH'ın bunun için kendi çözümü var: şifreyi klavyeden değil, yardımcı bir programdan isteyebiliyor.
Durum
Bir ajanın, yalnızca şifreyle girilebilen ortak bir sunucuda komut çalıştırması gerekiyordu. Bilinen araçların hiçbiri yoktu: sshpass yok, expect yok, pexpect kurmak için pip yok, bunları eklemek için sudo da yok.
OpenSSH'ın zaten sunduğu
SSH_ASKPASS, şifreyi standart çıktıya yazan bir programı gösterir. OpenSSH eskiden bunu yalnızca terminal olmadığında ve bir grafik ekran tanımlıyken kullanırdı. OpenSSH 8.4'ten beri SSH_ASKPASS_REQUIRE=force, yardımcı programın her seferinde kullanılmasını sağlıyor.
cat > ~/askpass.sh <<'END'
#!/bin/sh
echo 'sifreniz'
END
chmod 700 ~/askpass.sh
export SSH_ASKPASS=~/askpass.sh
export SSH_ASKPASS_REQUIRE=force
setsid -w ssh -o StrictHostKeyChecking=accept-new kullanici@sunucu 'echo OK; hostname' < /dev/null
OK ve sunucu adı geliyorsa yardımcı program işini yapmış demektir.
Neden setsid -w
Benim ortamımda bu iki değişken tek başına yetmedi: ssh terminali yine buldu ve yazmamı bekledi. setsid, komutu bağlı terminali olmayan yeni bir oturumda başlatır. Böylece şifreyi almanın tek yolu yardımcı program olarak kalır.
-w önemli. O olmadan setsid hemen dönebilir, ssh ise arka planda çalışmaya devam eder. Hem çıktıyı hem çıkış kodunu kaybedersiniz. -w ile komutun bitmesini bekler ve çıkış kodunu geri verir.
Zaman kazandıran ayrıntılar
< /dev/null,ssh'ın standart girdiyi beklemesini önler.- İlk bağlantıda
-o StrictHostKeyChecking=accept-new, sunucu anahtarını sormadan kabul eder. Anahtar sonradan değişirse yine reddeder. scpde aynı şekilde çalışır:setsid -w scp dosya kullanici@sunucu:klasor/ < /dev/null.SSH_ASKPASStam yol olmalı. Yukarıdaki tırnaksız~kabuk tarafından açıldığı için sorun çıkmaz.
Ne zaman kullanılır
Kısa ve başında durduğunuz işlere uygun: birkaç dosyaya bakmak, tek bir sürüm yüklemek, log okumak. Her gün kendi kendine çalışacak bir iş için anahtar kurun.
Yeni makaleleri e-postayla alın
Yalnızca yeni bir makale çıktığında. Reklam yok. Ayrıntılar →