Ssh ile sunucuya giriş yapıp yapamayacağımı nasıl kontrol edebilirim?


13

Sunucuların bir listesi var:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Onlara ssh ile giriş yapıp yapamayacağımı nasıl kontrol edebilirim? Yani varsayılan olarak ssh anahtar yetkilendirme yoluyla oturum açabilmeliyim yani, kısacası, böyle list.txt satırları (sunucular) sıralayan bir çözüme ihtiyacım var:

  • ssh anahtarıyla giriş yapabileceğim sunucular
  • şifre isteyen sunucular (elbette şifre bilinmiyor.)
  • ulaşılamayan sunucular

ssh ve ping komutları yardımıyla u başarabilirsiniz
Balaswamy vaddeman

pinggerçekten iyi bir gösterge değil. sshBağlantılara izin veren ancak ping'lere yanıt vermeyen birçok kurulum var.
Mat

Yanıtlar:


25

Bunu BatchModeseçeneğin bir kombinasyonu ve çıktıyı "ayrıştırma" ile yapabilirsiniz. ( sshherhangi bir nedenle bağlantı kuramazsa her zaman 255 döndürür, bu nedenle hata türlerini ayırt etmek için dönüş kodunu kullanamazsınız.)

Açık olduğunda BatchMode, parola istemi veya başka bir etkileşim denenmez, bu nedenle parola gerektiren bir bağlantı başarısız olur. (Ayrıca ConnectTimeout, ihtiyaçlarınıza uyacak şekilde ayarlanması gereken bir şey koydum . Ve gerçekten kötü dosya adları aldım.)

#! /bin/bash

rm good no_auth other
while read ip host ; do
    status=$(ssh -o BatchMode=yes -o ConnectTimeout=5 $ip echo ok 2>&1)
    case $status in
        ok) echo $ip $host >> good ;;
        *"Permission denied"*) echo $ip $host $status >> no_auth ;;
        *) echo $ip $host $status >> other ;;
    esac
done < list.txt

Daha ayrıntılı bir sınıflandırmaya ihtiyacınız varsa diğer hata türlerini (eksik sunucu ortak anahtarı gibi) tespit edebilirsiniz. Sonuçlara tek, sıralı bir dosyada ihtiyacınız varsa, sadece catgördüğünüz gibi çeşitli çıktı dosyaları birlikte.


1

Ssh aracılığıyla birden çok ana bilgisayarda çalışan komutları otomatikleştiren çeşitli araçlara bakın. Örneğin, Mussh ile :

mussh -H hosts.txt -o ConnectTimeout=5 -P -d -c 'echo `hostname` is alive'

Çıktıya gerektiği gibi masaj yapın.

Yan not: IP adreslerini neden saklıyorsunuz list.txt? Sunucu adları yeterlidir. Kullanmak istediğiniz adlar DNS adları değilse, Hostiçindeki yönergeleri kullanın ~/.ssh/config.


0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

wait, etkileşimli komutlarınıza girdi sağlayacaktır. -V bayrağına sahip ssh istemcisi, sunucunun hangi kimlik doğrulama yöntemlerini kabul ettiğini size bildirir. Etkileşimli bilgi istemine giderseniz, istifa edin. İstediğini yap, ihtiyacın olan her şeye sahipsin.

servers that are unreachable

Aynı, hepsine hükmedecek bir emir ve karanlıkta, onları bağla ... Hum.


0

Mussh komutu yalnızca hatalar verir, böylece hata ayıklamadan çalıştırmayı verebilirsiniz.

$ cat list.txt
10.1.2.93       trustme
10.1.2.92       wobudong
10.41.41.41     failhost

$ awk '{print $2}' list.txt | mussh -H - -t 10 -m -c hostname
trustme: trustme
failhost: ssh: Could not resolve hostname failhost: Name or service not known
wobudong: ssh: connect to host wobudong port 22: Connection timed out
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.