Bagaimana cara memeriksa apakah saya dapat masuk ke server melalui ssh?

13

Saya punya daftar server:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Bagaimana saya dapat memeriksa bahwa saya dapat masuk melalui ssh kepada mereka atau tidak? Maksud saya secara default saya harus bisa login melalui ssh key auth .., jadi singkatnya, saya butuh solusi yang mengurutkan baris (server) di list.txt seperti ini:

  • server yang saya dapat masuk melalui kunci ssh
  • server yang meminta kata sandi (tentu saja kata sandi tidak dikenal ..)
  • server yang tidak dapat dijangkau
LanceBaynes
sumber
dengan bantuan perintah ssh dan ping, Anda dapat mencapainya
Balaswamy vaddeman
pingsebenarnya bukan indikator yang baik. Ada banyak pengaturan yang memungkinkan sshkoneksi tetapi tidak membalas ping.
Mat

Jawaban:

25

Anda dapat melakukannya dengan kombinasi BatchModeopsi dan "parsing" output. ( sshselalu mengembalikan 255 jika gagal terhubung karena alasan apa pun, jadi Anda tidak dapat menggunakan kode pengembalian untuk membedakan antara jenis kegagalan.)

Dengan BatchModeaktif, tidak ada prompt kata sandi atau interaksi lainnya yang dicoba, sehingga koneksi yang memerlukan kata sandi akan gagal. (Saya juga meletakkan ConnectTimeoutdi sana yang harus disesuaikan agar sesuai dengan kebutuhan Anda. Dan mengambil nama file yang sangat buruk.)

#! /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

Anda dapat mendeteksi jenis kesalahan lainnya (seperti kunci publik server yang hilang) jika Anda memerlukan klasifikasi lebih rinci. Jika Anda membutuhkan hasil dalam satu file, diurutkan, hanya catberbagai file output sesuai keinginan Anda.

Tikar
sumber
1

Cari berbagai alat yang mengotomatiskan menjalankan perintah pada banyak host melalui ssh. Misalnya, dengan Mussh :

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

Pijat hasilnya sesuai kebutuhan.

Catatan: mengapa Anda menyimpan alamat IP list.txt? Nama server sudah cukup. Jika nama yang ingin Anda gunakan bukan nama DNS, gunakan Hostarahan dalam ~/.ssh/config.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
0
servers that I can log in via ssh key
servers that prompts for password (of course password is unknown..)

harapkan akan memberikan input ke perintah interaktif Anda. Klien ssh dengan flag -v akan memberi tahu Anda metode auth yang diterima server. Jika Anda masuk ke prompt interaktif, buat berhenti. Lakukan apa yang Anda inginkan, Anda memiliki semua yang Anda butuhkan.

servers that are unreachable

Sama, satu perintah untuk memerintah mereka semua, dan dalam kegelapan, ikat mereka ... Hum.

Aki
sumber
0

Perintah mussh hanya akan menampilkan kesalahan sehingga Anda bisa menjalankannya tanpa debug.

$ 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
pdxdoughnut
sumber