erra (erra) wrote,
erra
erra

Category:

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

Довелось мне тут столкнуться с надобностью передавать по 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() как раз позволяет отправлять команды, сохраняя сессию.

Tags: perl, ssh, tech
Subscribe

  • (no subject)

    — А не сломается? — с опаской спросил покупатель, прижимая к груди пёструю коробку. — Ну что вы! — расплылся в улыбке продавец. Пожизненная гарантия.…

  • Карлсон, которого неплохо крышуют.

    Мало кто знает, что мечтой Карлсона было стать автономным подводником. Готовился он к первому запуску не хуже Гагарина: катил баллоны, закатывал…

  • Страшная сказка на ночь

    Однажды добрый волшебник придумал машину Hyundai Getz, а злой подкрался потом и подправил результаты, пока добрый отвернулся. Добрый волшебник…

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments