?

Log in

No account? Create an account

Net::SSH::Perl, Net::SSH2, Net::OpenSSH и Net::Appliance::Session

« previous entry | next entry »
сент. 2, 2010 | 09:19 am

Довелось мне тут столкнуться с надобностью передавать по SSH серию команд с использованием языка Perl. Чтобы добиться цели, мне пришлось перепробовать 4 подключаемых модуля, прежде чем результат, наконец, был получен? Почему? Да потому, что Unix/Linux позволяет в рамках одной команды ssh отправить много команд sh, так что сессионность, по большому счёту, никого не волнует. Но в случае с различными маршрутизаторами и прочими приборами управления сетью всё сложнее, здесь цепочку команд не передашь.

Первая попытка была предпринята с модулем Net::SSH2, поскольку в примере на perlmonks.org была декларирована возможность отправки последовательности команд в shell-сессию. Когда я экспериментальным путём убедился в том, что из серии отправленных команд выполняется только последняя, я стал искать альтернативы. Способ решения проблемы, который придумал Colin Beske, для сетевого оборудования никак не годился.

Следующим в кастинге выступил самый первый из написанных по этой теме модулей Net::SSH::Perl. Помимо того, что он требует массу зависимостей, из которых в виде rpm-зависимостей прописаны не все (т.е., приходится вручную добавлять ряд пакетов), он работает очень медленно и — сюрприз — тоже не поддерживает сессионность. В последующих поисках я нашёл-таки способ реализации сессионности с помощью этого модуля, однако прежде чем прибегнуть к нему, попытался найти более лёгкий путь.

К этому моменту мне встретилось уже достаточно ссылок на Net::OpenSSH, и я взялся за него. Увы, этот модуль быстр и имеет подключаемую параллелизацию, но с сессионностью у него ровно те же проблемы. Так что и от него пришлось отказаться. Но, к счастью, в процессе поисков информации по нему обнаружился ещё один модуль, который был написан специально для работы с сетевым оборудованием.

Особенностью Net::Appliance::Session является наличие внутренней логики для автоматического отключения пейджера страниц, перехода в режимы администратора и конфигурации оборудования и обратно. Это удобно, когда управлению подлежит сетевое оборудование популярных платформ (Cisco, Juniper), и совсем неудобно, когда пытаешься управлять чем-нибудь ещё. Впрочем, встроенной логикой пользоваться необязательно, автоматическое отключение пейджера можно запретить вызовом метода $handle->do_paging(0), а метод $handle->cmd() как раз позволяет отправлять команды, сохраняя сессию.

Метки: , ,

Ссылка | Что скажете? | Поделиться

Comments {4}

* * *

from: неизвестный
date: сент. 14, 2010 11:41 am (UTC)
Ссылка

Для cisco оч удобно, спасибо!

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: сент. 14, 2010 12:48 pm (UTC)
Ссылка

на здоровье )

Свои 5 коп. | Предыстория | Развитие

* * *

from: неизвестный
date: июн. 24, 2011 11:28 am (UTC)
Ссылка

Очень надеюсь что поможет, замучилась с Net::SSH::Perl, буду пробовать Net::Appliance::Session

Свои 5 коп. | Развитие

erra

* * *

from: erra
date: июн. 24, 2011 12:03 pm (UTC)
Ссылка

удачи )

Свои 5 коп. | Предыстория | Развитие