Пакетный файл на SSH телефон Cisco и перезагрузите его - PullRequest
0 голосов
/ 17 октября 2018

Первый пост, новый для пакетной обработки и сценариев в целом, поэтому, пожалуйста, будьте осторожны со мной.

Мне было поручено написать сценарий Perl, который будет запускать сеансы SSH с 6 телефонами и отправлять им одну команду CLI для перезагрузки.их.Забавно, я знаю ДЖЕКА о Perl.Я немного разбираюсь в автоматизации партий и подумал, что было бы довольно просто использовать plink, чтобы делать то, что мне нужно.Насколько я ошибался.

Вот пример моего пакета plink.

@echo off
plink.exe -t -ssh XXXXXXX@111.111.1.1 -pw Abcd1234 < "C:\commands\commands.txt">output.txt
pause

Commands.txt:

debug

debug

reset hard

Запуск пакетного файла возвращает окно cmdОтображение: Использование имени пользователя "XXXXXXX" И мой output.txt показывает:

debug



debug



reset hardsnoopyplus login:

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

Здесь мы на третий день, и мой босс хотел бы получить некоторые результаты.У меня есть около 4 сломанных итераций моего сценария и хорошее отношение.Что я могу попробовать?

Кроме того, вот часть сценария Perl, который я обнаружил, который утверждал, что может обрабатывать отладочный логин snoopyplus для телефонов cisco, который я не смог заставить работать.Небольшая информация, которую я нашел, подсказала мне переписать ее в OpenSSH, которая, как мне кажется, не поддерживается в Windows.

sub reboot{ 

my ($ip,$sshpassword,$sshusername,$debuglogin,$debugusername,$debugpassword,$debugprompt,$command) = @_;

print "\nPlease be patient whilst Cisco phone at address $ip is rebooted. This may take up to 90 seconds to complete...\n";  

my $ssh = Net::SSH::Perl->new("111.111.1.1"); 

my $login_output = $ssh->login();

#my $ssh->login($sshusername, $sshpassword) || myAuditLog(LOG,"Login has failed. $!");

$ssh->waitfor('/'.$debuglogin.'>.*$/');
$ssh->send($debugusername);

$ssh->waitfor('/Password :.*$/');
$ssh->send($debugpassword);

$ssh->waitfor('/'.$debugprompt.'>.*$/');
$ssh->exec($command);

$ssh->close();

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Попробуйте этот формат команды plink:

plink.exe -t -ssh -pw Abcd1234 -m "C:\commands\commands.txt" XXXXXXX@111.111.1.1 >output.txt
0 голосов
/ 17 октября 2018

Если вы работаете в Windows, взгляните на Net :: SSH2 , который входит в состав Strawberry Perl.Используя его, вы сможете разговаривать со своими IP-телефонами:

#!perl
use strict;
use warnings;
use Net::SSH2;

my $ssh2 = Net::SSH2->new();

$ssh2->connect('example.com') or $ssh2->die_with_error;

if ($ssh2->auth_password($debuglogin, $debugpassword)) {
    my $chan = $ssh2->channel();
    $chan->shell();
    while (!$channel->eof) {
        if (my ($o, $e) = $channel->read2) {
            $out .= $o;
            $err .= $e;
        } else {
            $ssh2->die_with_error;
        }
    }
};
...