Страница 1 из 2
Скрипт перезагрузки микротика с удаленной машины
Добавлено: 13 ноя 2012, 04:56
djserg-minyar
Ребята всем добрый день, подскажите какой либо скрипт для удаленной перезагрузки микротика.
Либо что бы он по телнету заходил и задавал команду /system reboot
Либо что бы можно было через API тоже самое сделать.
По телнету пробовал так:
#!/bin/bash
(
sleep 3
echo "login"
sleep 5
echo "pass"
sleep 5
echo "/system reboot y"
) | telnet 192.168.0.12
в ответ зашел на микротик, но при вводе команд получаю кучу иероглифов:
# ./mik2.sh
Trying 192.168.0.12...
Connected to 192.168.0.12.
Escape character is '^]'.
MikroTik v5.21
Login: login
Password:
MMM MMM KKK TTTTTTTTTTT KKK
MMMM MMMM KKK TTTTTTTTTTT KKK
MMM MMMM MMM III KKK KKK RRRRRR OOOOOO TTT III KKK KKK
MMM MM MMM III KKKKK RRR RRR OOO OOO TTT III KKKKK
MMM MMM III KKK KKK RRRRRR OOO OOO TTT III KKK KKK
MMM MMM III KKK KKK RRR RRR OOOOOO TTT III KKK KKK
MikroTik RouterOS 5.21 © 1999-2012
http://www.mikrotik.com/ ^[[?62;1;2;6;7;8;9c^[[48;3R
Connection closed by foreign host.
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 13 ноя 2012, 07:39
simpl3x
Код: Выделить всё
#!/usr/bin/perl
use Net::Telnet ();
$t = new Net::Telnet ;
$user="username";
$pass="password";
$epass="enable";
$host="10.100.100.1";
print("Подключаемся к: $host\n");
$t=new Net::Telnet(Host => "$host", Timeout => 30);
$t->max_buffer_length(500000);
($prematch, $match)=$t->waitfor('/login:.*$/i');
print("$match $user\n");
$t->print("$user");
($prematch, $match)=$t->waitfor('/password:.*$/i');
print("$match $pass\n");
$t->print("$pass");
($prematch, $match)=$t->waitfor('/>.*$/i');
$t->print("/system reboot y");
$t->waitfor('/>.*$/i');
print("Отключаемся от: $host\n");
$t->close;
попробуйте как нибудь так, не перле
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 13 ноя 2012, 08:49
djserg-minyar
simpl3x писал(а):попробуйте как нибудь так, не перле
спасибо, но не совсем корректно отрабатывает данная команда:
$t->print("/system reboot y");
т.е. если написано так в скрипте, то микротик не ребутиться.
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 13 ноя 2012, 10:44
djserg-minyar
чуть изменил окончание
$t->print("/system reboot");
($prematch, $match)=$t->waitfor('/].*$/i');
$t->print("y\n");
$t->waitfor('/shortly.*$/i');
print("Отключаемся от: $host\n");
$t->close;
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 05 дек 2012, 17:16
djserg-minyar
Скрипт работает пока роутер сильно не нагружен, как только появляется сильная нагрузка, то начинает подтупливать и не всегда выполняется.
Решил попробовать сделать через Perl на API.
Библиотеку Milrotik API залили на сервер в /etc/perl
создал пока вот такой простенький скрипт:
Код: Выделить всё
#!/usr/bin/perl -w
use strict;
use vars qw($error_msg $debug);
use Mtik;
my($mtik_host) = '192.168.0.12';
my($mtik_username) = 'login';
my($mtik_password) = 'pass';
my($mtik_port) = '58728';
print "Logging in to Mtik: $mtik_host\n";
if (Mtik::login($mtik_host,$mtik_username,$mtik_password))
{
Mtik::logout;
}
вроде бы работает, если API на стандартном порту.
А мне надо подключиться не совсем на стандартный, но это я думаю можно поправить через библиотеку API.
Теперь осталось вроде бы отправить ему команду /system/reboot
но с логикой отправки команд на микротик через API так и не разобрался(((
Надеюсь на вашу помошь.
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 05 дек 2012, 17:24
simpl3x
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 05 дек 2012, 19:10
djserg-minyar
simpl3x писал(а):как то так вроде
ок, спасибо попробую завтра.
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 06 дек 2012, 05:01
djserg-minyar
В общем получаю в ответ это
Код: Выделить всё
# ./mik5.pl
Logging in to Mtik: 192.168.0.12
Logged in to 192.168.0.12 as sergej
Can't use an undefined value as a HASH reference at /etc/perl/Mtik.pm line 355.
строка на которую ругается скрипт
Код: Выделить всё
sub mtik_cmd
{
my($cmd) = shift;
my(%attrs) = %{(shift)};
$error_msg = '';
my(@command);
push(@command,$cmd);
foreach my $attr (keys (%attrs))
{
push(@command,'=' . $attr . '=' . $attrs{$attr});
}
my($retval,@results) = talk(\@command);
if ($retval > 1)
{
$error_msg = $results[0]{'message'};
}
return ($retval,@results);
}
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 06 дек 2012, 06:49
simpl3x
какая из них 355
Re: Скрипт перезагрузки микротика с удаленной машины
Добавлено: 06 дек 2012, 07:08
djserg-minyar