Як перевірити, чи можу я ввійти на сервер через ssh?


13

У мене є список серверів:

cat list.txt
10.10.10.10 servera
10.11.10.10 serverb

Як я можу перевірити, чи можу я ввійти через ssh до них чи ні? Я маю на увазі, я за замовчуванням повинен мати можливість увійти через ключ ssh auth .., коротше кажучи, мені потрібно рішення, яке сортує лінії (сервери) у list.txt так:

  • сервери, на які я можу ввійти через ключ ssh
  • сервери, що вимагають ввести пароль (звичайно, пароль невідомий ..)
  • недоступні сервери

за допомогою команд ssh і ping u може досягти цього
Balaswamy vaddeman

pingнасправді не хороший показник. Існує багато налаштувань, які дозволяють sshз'єднатися, але не відповідають на pings.
Мат

Відповіді:


25

Це можна зробити за допомогою комбінації BatchModeпараметрів та "розбору" результату. ( sshзавжди повертає 255, якщо не вдалося з’єднатися з будь-якої причини, тому ви не можете використовувати код повернення для розмежування типів відмов.)

Увімкнено BatchMode, не намагається ввести пароль або інша взаємодія, тому з’єднання, яке вимагає пароля, не вдасться. (Я також помістив ConnectTimeoutтуди, який слід налаштувати відповідно до ваших потреб. І вибрав дійсно погані назви файлів.)

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

Ви можете виявити інші типи помилок (наприклад, відсутність відкритого ключа сервера), якщо вам потрібна більш детальна класифікація. Якщо вам потрібні результати в одному, відсортованому файлі, просто catрізні вихідні файли разом, як вважаєте за потрібне.


1

Знайдіть різні інструменти, які автоматизують виконання команд на кількох хостах через ssh. Наприклад, з Mussh :

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

Масажуйте вихід за потребою.

Бічна примітка: чому ви зберігаєте IP-адреси в list.txt? Імен серверів достатньо. Якщо імена, які ви хочете використовувати, не є іменами DNS, використовуйте Hostдирективи в ~/.ssh/config.


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

очікуємо, буде надавати вклад для ваших інтерактивних команд. Клієнт ssh із прапорцем -v підкаже вам, які аутентичні методи приймає сервер. Якщо ви перейдете до інтерактивного підказки, змусьте його вийти. Робіть те, що хочете, у вас є все необхідне.

servers that are unreachable

Те саме, одна команда керувати ними всіма, а в темряві зв’язувати їх ... Гум.


0

Команда mussh видасть лише помилки, так що ви можете просто запустити її без налагодження.

$ 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.