2015-08-07 6 views
0

Мне нужно, чтобы получить удаленную версию Sshd используя Net :: SSH2 из окон черезвернуть удаленную версию SSH в Perl с помощью Net :: SSH2

./check_ssh -H exemple.com 
    OpenSSH_6.0p1 (Protocol 2.0) 

В случае SSH отключенный просто отображать соединения отказался или Оправа Тайм-аут если соединение не было специально отклонено.

Конечной целью было бы симулировать поведение плагина check_ssh nagios из окна окна. Я буду подключаться из этого окна к устройству unix и отправлять результаты моего скрипта на nagios через nrpe.

Мне не нужно войти в систему. Я пытался установить в dwim perl Net :: SSH :: Perl без успеха единственный, который мне удалось установить, был Net :: SSH2. Мне не нужна поддержка для ssh v1.

+0

Пожалуйста, укажите ошибку, которую вы получаете при попытке установить Net :: SSH :: Perl. – Gene

+0

Net :: SNMP :: Perl старый и не поддерживается [ссылка] (http://stackoverflow.com/questions/11329617/unable-to-install-the-perl-module-netsshperl-on-windows-64-bit) такой же как это: это уже 2 года без решения. [link] (http://www.perlmonks.org/?node_id=1063317) – user2653557

ответ

0

Если вы можете установить утилиту netcat, вы можете использовать ее для ее проверки. Например:

my $NC = `nc -w 1 localhost 22`; 
print $NC; 

В этом примере netcat подключается к localhost на порту 22 и истекает через 1 секунду.

+0

netcat для windows .. помечается как вирус моей компанией. Я предпочитаю, если возможно, использовать модули snmp. – user2653557

+0

Как насчет cygwin? С этим можно установить netcat. – Gene

+0

Это сервер компании. perl и его модули - это максимум, который я могу установить, и они сделали исключение, потому что это единственный шлюз в сети, где мне нужно проверить сервер. Я предпочитаю использовать только модули Perl. – user2653557

2

Вы можете использовать модуль IO::Socket::INET. Например:

$ cat ssh.pl 
#!/usr/bin/perl 

use IO::Socket::INET; 

my $socket = IO::Socket::INET->new(
    PeerHost => 'localhost', 
    PeerPort => 22, 
); 

$socket->print("\n"); 
my $output = join '', $socket->getlines(); 

print $output; 

Что результат будет выглядеть следующим образом:

$ ./ssh.pl 
SSH-2.0-OpenSSH_6.2 
Protocol mismatch 

С этого момента вам нужно просто разобрать вывод.

+0

Как смоделировать тот факт, что время соединения отключается? или когда соединение отклонено. я получаю это вместо этого: не может вызывать метод печати по неопределенному значению в строке check_ssh.pl 44 – user2653557

+0

Имитировать? Вы имеете в виду ручку? Взгляните на документацию IO :: Socket :: INET, есть параметр таймаута, который вы можете установить. http://perldoc.perl.org/IO/Socket/INET.html – Gene

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