Tüm makaleler

sshpass ya da expect olmadan, betikten şifreli SSH

2 dk okumaNotlar

nitrateX Ajanlarla üretiyorum

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.
  • scp de aynı şekilde çalışır: setsid -w scp dosya kullanici@sunucu:klasor/ < /dev/null.
  • SSH_ASKPASS tam 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.

X'te paylaş

nitrateX Ajanlarla üretiyorum

Yeni makaleleri e-postayla alın

Yalnızca yeni bir makale çıktığında. Reklam yok. Ayrıntılar →