Python: отправить команду ssh на несколько серверов с помощью parallel-ssh, получить полный отказ, если один из них недоступен
Я использую такой способ:
servers = ["192.168.100.161", "192.168.100.162", "192.168.100.163"]
top_command = "top -b -n 1"
host_config = make_host_config(servers)
client = ParallelSSHClient(servers, timeout=2, num_retries=1, retry_delay=1, host_config=host_config)
try:
output = client.run_command(top_command, sudo=True)
print([(k, [x for x in v.stdout], [x for x in v.stderr]) for (k, v) in output.items()])
for host, host_response in output:
print(host, host_response)
except Exception as e:
print("failed to connect some host: ", e)
Что я получаю сейчас: исключение.
не удалось подключиться к некоторому хосту: ("Ошибка подключения к хосту '%s:%s' - %s - повторить попытку%s/%s", '192.168.100.161', 22, 'тайм-аут', 1, 1)
Что я хочу получить: ответы от доступных серверов Ошибки от недоступных серверов
Как этого добиться, ребята?
1 ответ
Я импортирую модуль сокета, чтобы проверить порт, к которому я подключаюсь, перед выполнением кода на хосте (ip, порт). В приведенном ниже примере это тест TCP для проверки работы порта 3306 MySQL. Я создаю пустую переменную вне функции connection_test_result, которая заполняется функцией test_connection(см. Ниже). Функция выполнения кода читает в connection_test_result и выполняется, если результат == 0. Возможно, это поможет:
def test_connection(ip, port):
global connection_test_result
socket.setdefaulttimeout(1)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connection_test_result= sock.connect_ex((ip, int(port)))
return connection_test_result