Я хотел бы найти команду Linux, чтобы я мог написать bash для проверки связи между тремя (или более серверами).

Моя потребность показана в сценарии ниже:

Source  Gateway Dest
Host A  Host B1 Host C1
Host A  Host B2 Host C2
Host A  Host B3 Host C3

У меня есть хост A, который будет иметь bash для проверки связи от хоста B1 к C1, C2 и C3, чем связь от хоста B2 к C1, C2 и C3 и так далее.

Этот тест может быть единственным ping или traceroute, что я пробовал безуспешно.

1 ответ1

0

Не уверен, является ли это наиболее элегантным решением, но вы могли бы просто поместить "checkconnections.sh" на каждый из ваших B1-Bx, который запускает эхо-запросы к соответствующим другим серверам и проверяет, будет ли результат 0% потери пакета или нет:

ping -c 3 192.168.0.34 | grep " 0.0% packet loss"

Примечание: разные системы, по-видимому, печатают результаты проверки связи в разных форматах, поэтому дважды проверьте, что grep «0.0% потери пакетов» фактически перехватывает вывод вашей системы!

Если результат пуст, ваше соединение не удалось. Если это не так, соединение должно быть в порядке. Скажите сценарию написать файл вывода / журнала.

Затем вы можете поместить файл statuscollection.sh на ваш хост A, который проходит по всем блокам B1-Bx, выполняет там сценарии проверки и впоследствии собирает файлы журнала.

ssh user@boxBx 'path/to/checkconnections.sh'
scp user@boxBx:path/to/log.file destination/Bxlog.file

Чтобы это работало, вам нужно настроить аутентификацию на основе ключей (http://www.cyberciti.biz/tips/ssh-public-key-based-authentication-how-to.html).

Надеюсь, что это имеет смысл.

Изменить: В зависимости от аутентификации на основе ключей (см. Выше) и от того, что вы знаете IP-адреса всех ящиков (от B1 до Bx) и хостов (от C1 до Cx), может работать следующее:

#!/bin/bash

echo "Beginning connection tests."

# create / clear log file
echo "" > results.log

for boxip in [list IPs of your boxes B1 to Bx here]
do
  for hostip [list IPs of your hosts C1 to C2 here]
  do  
    echo "Checking connection from $boxip to $hostip:" >> results.log
    ssh user1@b$boxip 'ping -c 3 $hostip | grep " 0% packet loss"' >> results.log
    echo "--------------------------------" >> results.log
  done
done

Для получения дополнительной информации о циклах см. Пример 11-1 здесь: http://tldp.org/LDP/abs/html/loops1.html

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .