alibek Posted January 13, 2015 · Report post Использую скрипт на Perl для работы с маршрутизатором Cisco. Подключаюсь так: my $ssh = Net::OpenSSH->new('user@10.1.255.250', 'password'=>'pwd'); и получаю ошибку "unable to establish master SSH connection: control command failed". Включил дебаг, в выводе увидел такую строчку: "ssh: illegal option -- O". В актуальной версии OpenSSH ключ O есть. Но у меня на сервере установлен OpenSSH_3.9p1 и у него ключа O нет. Хотя есть ключ S, который судя по документации делает примерно то же самое. Обновить на сервере OpenSSH я не могу. Можно ли, не влезая в исходники Net::OpenSSH, научить его работать со старой версией OpenSSH? Или, если без обновления OpenSSH ничего нельзя сделать, можно ли его установить отдельно, чтобы он не затрагивал систему? На сервере RHEL4, OpenSSH_3.9p1. Нашел openssh-5.3p1-104.el6.i686.rpm, он для CentOS6 и должен подойти. Но я не могу его просто установить: # rpm -i --test openssh-5.3p1-104.el6.i686.rpm предупреждение: openssh-5.3p1-104.el6.i686.rpm: подпись RSA/MD5 V3: NOKEY, key ID c105b9de ошибка: Неудовлетворенные зависимости: libc.so.6(GLIBC_2.4) нужен для openssh-5.3p1-104.el6.i686 libc.so.6(GLIBC_2.8) нужен для openssh-5.3p1-104.el6.i686 libcrypto.so.10 нужен для openssh-5.3p1-104.el6.i686 libcrypto.so.10(OPENSSL_1.0.1) нужен для openssh-5.3p1-104.el6.i686 libcrypto.so.10(OPENSSL_1.0.1_EC) нужен для openssh-5.3p1-104.el6.i686 libcrypto.so.10(libcrypto.so.10) нужен для openssh-5.3p1-104.el6.i686 libfipscheck.so.1 нужен для openssh-5.3p1-104.el6.i686 libselinux >= 1.27.7 нужен для openssh-5.3p1-104.el6.i686 rpmlib(FileDigests) <= 4.6.0-1 нужен для openssh-5.3p1-104.el6.i686 rtld(GNU_HASH) нужен для openssh-5.3p1-104.el6.i686 rpmlib(PayloadIsXz) <= 5.2-1 нужен для openssh-5.3p1-104.el6.i686 Обновлять glibc, openssl и selinux я бы не хотел, чтобы не сломать софт, работающий на сервере. Может быть есть бинарники, собранные под RHEL4 и не использующие системные библиотеки? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
GrandPr1de Posted January 13, 2015 · Report post Используйте силу expect. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
dimas Posted January 13, 2015 · Report post А если добавить параметр ctl_path => ... и указать в нем ? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted January 13, 2015 · Report post expect бы очень не хотелось использовать. Net::SSH::Perl не подходит, в Cisco ssh немного кривой, он поддерживает только keyboard-interactive, поэтому нормальной автоматической авторизации не сделать. Net::SSH:Expect — кривой костыль, хотя если ничего другого не найду, придется разбираться с ним. И к тому же я не уверен, что с keyboard-interactive получиться его использовать. Net::SSH2 у меня не работает, выдает "*** glibc detected *** double free or corruption (out): 0x08a3b198 ***" при подключении (скорее всего из-за старых библиотек). Net::OpenSSH был бы оптимальным, но версии модуля под старый OpenSSH я не нашел. А если добавить параметр ctl_path => ... и указать в нем Что указать? В этом параметре указывается каталог для сокетов. Этот каталог передается в OpenSSH после аргумента -O. А у меня OpenSSH этот аргумент не понимает. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
GrandPr1de Posted January 13, 2015 · Report post Net::SSH:Expect — кривой костыль, хотя если ничего другого не найду, придется разбираться с ним. И к тому же я не уверен, что с keyboard-interactive получиться его использовать. Не кривей чем то что вы используете. Нормально он вяжется с чем угодно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
sirmax Posted January 13, 2015 · Report post sshpass не решит вашу проблему? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted January 13, 2015 · Report post А в чем проблема правки исходников? Не хотите лезть с модуль, установленный в системе? Тогда сделайте monkey patching модуля прямо из своего кода: http://stackoverflow.com/questions/449690/how-can-i-monkey-patch-an-instance-method-in-perl Патчить надо, судя по всему, ф-цию _master_ctl. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
DVM-Avgoor Posted January 13, 2015 · Report post Telnet проще сделать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted January 13, 2015 · Report post sshpass не решит вашу проблему? Не решит. Сейчас у меня используется bash-скрипт, в котором используется переменная окружения SSH_ASKPASS. Но теперь нужна сложная обработка данных, а shell-скрипт для этого подходит плохо. А в чем проблема правки исходников? Я не очень хорошо знаю Perl. Да и не уверен, что эту проблему можно решить патчем пары строк — все-таки ключи O и S делают разные вещи. Telnet проще сделать. Можно пояснить? Если имеется ввиду, что при telnet можно передать пароль — то это не основная проблема. В этом случае можно использовать и expect, но тогда придется парсить вывод, отладочные сообщения, строку приглашения и т.п. Net::OpenSSH удобен именно тем, что можно получить вывод, связанный непосредственно с переданной командой. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Abram Posted January 13, 2015 · Report post Как вариант - соберите где-нибудь сбоку еще один openssh требуемой версии и натравите на него Net::OpenSSH. Путь к ssh-клиенту задаётся вот так: my $ssh = Net::OpenSSH->new($host, ssh_cmd => '/opt/OpenSSH/bin/ssh'); А, вы уже даже новый пакет с OpenSSH нашли. Попробуйте его просто распаковать (тупо как архив, rpm2cpio) куда-нибудь и запустить. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...