2016-04-12 3 views
1

Я пишу скрипт, который использует paramiko для ssh на нескольких удаленных хостах и ​​запускает несколько проверок. Некоторые хосты настроены как отказы для других, и я не могу определить, какая из них используется, пока я не попытаюсь подключиться. После подключения к одному из этих «неактивных» хостов хост сообщит мне, что вам нужно подключиться к другому «активному» IP-адресу, а затем закрыть соединение через n секунд. Это, похоже, записывается в стандартный вывод SSH-соединения/сеанса (т. Е. Это не баннер SSH).Paramiko get stdout из объекта соединения (не exec_command)

Я использовал paramiko совсем немного, но я не понимаю, как получить этот вывод из соединения, exec_command, очевидно, даст мне stdout и stderr, но хост выводит это сразу после соединения, и он не принимает никаких других входящих запросов/сообщений. Он закрывается через n секунд.

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

Любые предложения относительно того, как я могу захватить этот выход, с или без paramiko, очень ценится.

ответ

0

Я выяснил, как получить данные, было довольно прямо, чтобы быть честным, хотя и немного хакерским. Это может не работать в других случаях, особенно если есть латентность, но я также могу не понимать, что происходит:

Когда соединение открывается, сервер выплевывает два сообщения, один из которых говорит, что он не может chdir в конкретный каталог , затем через несколько миллисекунд выплевывается еще одно сообщение о том, что вам нужно подключиться к другому IP-адресу. Если я отправлю команду сразу после подключения (не имеет значения, какая команда), exec_command интерпретирует это второе сообщение как ответ. Поэтому на данный момент у меня есть решение моей проблемы, так как я могу проверить эту строку для известного сообщения и изменить поток выполнения.

Однако, если то, что я описываю, является точной, то это может не работать в ситуациях, когда слишком много времени ожидания, а команда «тест» не отправляется до получения ответа сервера.

Насколько я могу судить (и я могу быть очень не прав), в настоящее время нет надлежащего способа получить поток stdout сразу после открытия соединения с paramiko. Если кто-то знает способ, пожалуйста, дайте мне знать.

 Смежные вопросы

  • Нет связанных вопросов^_^