Как проверить работоспособность SSH или нет - PullRequest
0 голосов
/ 17 июня 2019

у меня большое количество устройств около 300 У меня к ним разные кредиты SSH КРЕДЫ, API КРЕДЫ Так как я не могу вручную SSH для всех этих устройств и проверить работоспособность кредитов или нет Я думаю о написании сценария и передаче IP-адреса устройства в сценарий, и в результате я получаю «да», если кредиты SSH работают, и НЕТ, если не работает. Я новичок во всем этом! детали будут оценены! Я запусту этот скрипт на сервере, с которого я могу использовать ssh на всех устройствах.

1 Ответ

0 голосов
/ 17 июня 2019

Ваш вопрос не ясен относительно того, какие учетные данные вы используете для подключения к каждому хосту: у всех хостов, например, один и тот же метод подключения?

Предположим, что вы используете метод авторизованных ключей ssh ​​для входа на каждый хост (т. Е. У вас есть открытый ключ на каждом хосте в файле ~/.ssh/authorized_keys).Вы можете запустить ssh с командой do nothing для каждого хоста и посмотреть на код завершения, чтобы увидеть, было ли соединение успешным.

HOST=1.2.3.4
ssh -i /path/to/my/private.key user@${HOST} true > /dev/null 2>&1
if [ $? -ne 0]; then echo "Error, could not connect to ${HOST}"; fi

Теперь это просто случай обернуть это в некую форму цикла, где выциклически проходите по каждому хосту (и выберите правильный ключ для каждого хоста, возможно, вы могли бы назвать каждый закрытый ключ после имени или IP-адреса целевого хоста).Скрипт выйдет из всех тех хостов, для которых соединение было невозможно.Обратите внимание, что в этом сценарии предполагается, что на целевом хосте доступно true, в противном случае вы можете использовать ls или аналогичный.Мы перенаправляем весь вывод на /dev/null/, так как нас интересует только возможность подключения.

РЕДАКТИРОВАТЬ В ОТВЕТЕ НА OP CLARIFICATION:

Я настоятельно рекомендую не использовать имя пользователя / пароль дляlogin, поскольку имя пользователя и пароль, скорее всего, будут где-то храниться в вашем скрипте или даже в истории вашей оболочки, если вы запускаете команду из командной строки.Если вы должны сделать это, то вы можете использовать expect или sshpass, как подробно описано здесь: https://srvfail.com/how-to-provide-ssh-password-inside-a-script-or-oneliner/

Показанная команда ssh не порождает оболочку, она буквально входит в систему на удаленном сервере,выполняет команду true (или ls и т. д.), затем завершается.Вы можете использовать код возврата ($? в bash) для проверки правильности выполнения команды.Мой пример показывает, что распечатывается сообщение об ошибке для ненулевых кодов возврата, но для распечатки YES при успешном соединении вы можете сделать это:

if [ $? -eq 0]; then echo "${HOST}: YES"; fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...