Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Новинка
Распродажа
Новости
Доставка
Оплата
Загрузки
  • Прошивки
    • WinBox
    • RouterOS
    • Мобильные приложения MikroTik
    • Архив
  • RouterOS
  • Мобильные приложения MikroTik
  • Архив
Форум
Настройка
    info@mikrotik.moscow
    +7 495 320-55-52
    Заказать звонок
    Mikrotik.moscow
    Каталог
    • Акции
      Акции
    • Маршрутизаторы
      Маршрутизаторы
    • Коммутаторы
      Коммутаторы
    • Радиомосты и уличные точки доступа
      Радиомосты и уличные точки доступа
    • Wi-Fi для дома и офиса
      Wi-Fi для дома и офиса
    • LTE/5G
      LTE/5G
    • Powerline адаптеры
      Powerline адаптеры
    • IoT устройства
      IoT устройства
    • Оборудование 60 ГГц
      Оборудование 60 ГГц
    • Материнские платы RouterBOARD
      Материнские платы RouterBOARD
    • Корпуса
      Корпуса
    • Интерфейсы
      Интерфейсы
    • SFP/QSFP трансиверы
      SFP/QSFP трансиверы
    • Аксессуары
      Аксессуары
    • Антенны
      Антенны
    • Архив
      Архив
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Скачать WinBox Скачать Прошивки Форум > RouterOS Форум > SwOS Форум > Железо
    Mikrotik.moscow
    Каталог
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Mikrotik.moscow
    Телефоны
    +7 495 320-55-52
    Заказать звонок
    0
    0
    0
    Mikrotik.moscow
    • +7 495 320-55-52
      • Назад
      • Телефоны
      • +7 495 320-55-52
      • Заказать звонок
    • info@mikrotik.moscow
    • г. Москва, ул. Бакунинская, 84
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной


    • Кабинет
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Форум
    RouterOS
    [CONTRIB] SSH Perl скрипт — автоматизация пакетных команд *UPDATED

    [CONTRIB] SSH Perl скрипт — автоматизация пакетных команд *UPDATED

    Форумы: RouterOS, Аппаратное обеспечение, SwOS, Обратная связь, Объявления, Сторонние инструменты
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    [CONTRIB] SSH Perl скрипт — автоматизация пакетных команд *UPDATED, RouterOS
     
    iredden
    Guest
    #1
    0
    28.01.2005 07:23:00
    Я ковырялся с этим, основываясь на коде другого человека. Нашел этот скрипт в интернете без указания авторства! Спасибо тому, кто написал оригинальный скрипт.

    EDIT: http://www.dysan.net/Perl/lg.php – Оригинальный скрипт. Вы кладете файл с именем monitor.passwd в вашу директорию etc… /etc/monitor.passwd:
    admin||blah01 затем создаете файл под названием txtfile.txt и помещаете в него что-нибудь… /somewhere/txtfile.txt:
    /ip dhcp-server lease print затем запускаете скрипт, например, ssh-cmd 127.0.0.1 txtfile.txt, и он должен отправлять все команды из txtfile.txt на роутер! Я успешно использую этот скрипт, чтобы вытаскивать все записи статических IP-адресов из моей mysql-базы (их там около 30-40 штук) и загружать их в dhcp-сервер Mikrotik. Работает отлично!

    #!/usr/bin/perl
    # by Ian Redden © 2005
    # Purpose: to get info off of a router for looking glass.
    #
    #-variables
     use Expect;
     $ssh = "/usr/bin/ssh";
     $router = "$ARGV[0]";
     $txtfile = "$ARGV[1]";

    #-get username/password
     open(PS,"/usr/local/mikrotik/monitor.passwd");
      while (<PS>) {
        chomp;
        ($usernm,$pass) = split(/\|\|/, $_);
      }
     close(PS);
     $command = "$ssh -l $usernm $router";

    #-connect to router.
     $ssh = Expect->spawn("$command");
     $ssh->log_stdout(1);

    #-check to see if dsa authenticity question appears
      if ($ssh->expect(2, "yes/no")) {
        print $ssh "yes\r";
      }

    #-send password.
      if ($ssh->expect(undef, "password:")) {
        print $ssh "$pass\r";
      }

    #-send command.
      open( FILE, "< $txtfile" ) or die;
      if ($ssh->expect(undef, ">")) {
              while ($cmd = <FILE>) {
                 print $ssh "$cmd\r";
                 $ssh->expect(undef, ">");
              }
     }
     close FILE;
     print $ssh "/quit\r";
     
     
     
    YazzY
    Guest
    #2
    0
    28.01.2005 08:30:00
    Отличная работа! Это позволяет делать всё на панели управления из веб-приложения. Не забудь, что скрипт требует pearl-модуль под названием Expect и первоначальный вход по ssh на роутер для обмена ключами. Большое спасибо, iredden.
     
     
     
    iredden
    Guest
    #3
    0
    31.01.2005 02:00:00
    Обновил ssh-cmd. Заметил ошибку, когда писал скрипты для dhcp и shaper пропускной способности из моей базы данных MySQL. Скрипты писали все верные команды в файл, но ssh-cmd примерно в половине случаев отправлял только половину команд, а потом непонятно прекращал работу. Сейчас это исправлено и работает на 100%.
    perl -MCPAN -e shell install Expect install IO:Tty install IO:Stty quit
     
     
     
    iredden
    Guest
    #4
    0
    10.02.2005 22:17:00
    Еще одно обновление.
     
     
     
    changeip
    Guest
    #5
    0
    10.02.2005 22:21:00
    Ну вот скажи, почему нельзя просто использовать ssh и команду для выполнения? Не запускается ли какой-нибудь shell или что-то в этом роде? Кажется мне это какой-то костыль. После использования команды вроде: ssh -l admin -p pass router.domain.tld “export” должно просто вывести ответ, но не выводит. Просто интересно, это исправят в 2.9 или без обхода никак? Сэм.
     
     
     
    fusion
    Guest
    #6
    0
    13.02.2005 18:30:00
    И всё равно не работает через CRON…
     
     
     
    YazzY
    Guest
    #7
    0
    15.02.2005 22:44:00
    Не люблю использовать Perl, когда это не нужно, поэтому написал то же самое на sh. Работает и с ssh, и с telnet. Получилось немного понарочистей, так как я еще и добавил меню dialog (был немного свободного времени). Весь скрипт легко изменить, чтобы он подходил для запуска из cronjob. Просто почитайте функции connect_ssh и connect_telnet. Скрипт доступен по адресу: http://yazzy.yazzy.org/coding/shell/routeros/routeros.txt. Тестировал на sh на FreeBSD и Gentoo Linux (где /bin/sh → bash). Приятного использования.
     
     
     
    agregorian
    Guest
    #8
    0
    20.02.2005 13:17:00
    Привет YazzY, я пытаюсь отправлять команды через plink.exe по ssh, но получаю ошибку "Server sent command exit status 127". Подключение работает, но когда я отправляю любую команду, получаю эту строку. Похоже, дело в синтаксисе, но не могу разобраться. Если кто-то сможет помочь, буду очень благодарен.
     
     
     
    isptlan
    Guest
    #9
    0
    21.02.2005 16:06:00
    Есть ли какая-нибудь версия для систем на базе Windows? (с/без SSH)
     
     
     
    denialsander
    Guest
    #10
    0
    22.02.2005 09:19:00
    Попробуй использовать PERL для Windows. Я собираюсь протестировать это в течение недели-двух, так что не могу гарантировать, что у тебя получится.
     
     
     
    cmit
    Guest
    #11
    0
    22.02.2005 16:54:00
    Окей, учитывая количество вопросов здесь – есть ли интерес к инструменту для автоматизации MikroTik под Windows? То есть, такому, который мог бы читать команды из файла, выполнять их, выводить результаты на экран или сохранять на диск… Ну, в общем, с каким-нибудь планировщиком или чем-то подобным. Какие еще предложения? Что готовы были бы заплатить за это заинтересованные ребята? У меня есть прототип почти готов, но потребуется еще серьезная работа и доработка. Все заинтересованные могут писать на info@cmit.de – не хочу злоупотреблять этим форумом для подобных обсуждений.
     
     
     
    agregorian
    Guest
    #12
    0
    22.02.2005 23:09:00
    Привет, Cmit! Интересуюсь SSH или подобным инструментом, который можно интегрировать в .bat или .exe файл для упаковки команд, которые будут отправляться на Mikrotik. Команды будут поступать из моей программы биллинга и включать добавление/удаление пользователей хотспота, очередей и любые другие полезные функции. У меня есть Plink.exe (инструмент командной строки), но не могу заставить Mikrotik принимать команды, возвращает “…a ststus 127.”, возможно, дело в синтаксисе, как я и говорил выше. Ты использовал Plink.exe?
     
     
     
    cmit
    Guest
    #13
    0
    23.02.2005 05:45:00
    Я и несколько других тоже пробовали plink.exe, но безрезультатно. Похоже, дело в том, как RouterOS порождает оболочку (не то чтобы), из-за чего нельзя выполнять команды RouterOS оттуда. Не думаю, что plink.exe нельзя заставить работать... Мой инструмент будет сделан именно для таких целей. Он будет работать только через командную строку, возможно, с интегрированным планировщиком для повторяющихся задач и т.д. Какие у вас есть предложения по необходимым функциям? Можете ли вы отправить мне письмо на указанный выше адрес?
     
     
     
    surfnet
    Guest
    #14
    0
    03.07.2005 03:34:00
    Существовал ли когда-нибудь инструмент для Windows?
     
     
     
    cmit
    Guest
    #15
    0
    04.07.2005 07:35:00
    Пока что - интерес был, ну, так себе…
     
     
     
    iredden
    Guest
    #16
    0
    20.07.2005 15:27:00
    Ну вот, для всех, кто мне писал с просьбой выложить это.
     
     
     
    lastguru
    Guest
    #17
    0
    21.07.2005 08:59:00
    Да, вот тебе короткий примерчик, на всякий случай, если кому-то это вдруг понадобится: expect -c "spawn ssh user@1.1.1.1 "/ip route print"; expect "password: "; send "userpass\r"; interact”. Запомни, что хост, к которому ты подключаешься, должен быть заранее добавлен в SSH known hosts. И еще, это только для 2.9.
     
     
     
    variable
    Guest
    #18
    0
    27.10.2005 21:25:00
    Это единственный способ сделать это? У меня сейчас есть PHP-скрипт, который подключается через telnet и тратит 60 секунд на выполнение команды. И ещё вопрос: как вытаскивать данные из Mikrotik? Первые несколько строк получаются легко, а как быть, когда нужно нажимать стрелку вниз? Perl будет сильно быстрее, чем мой текущий PHP-telnet? Спасибо.
     
     
     
    cmit
    Guest
    #19
    0
    28.10.2005 07:12:00
    По поводу "down key": во всех командах print в MikroTik есть параметр "without-paging". Тогда всё будет выводиться без ожидания нажатия клавиши после каждой страницы данных. Например: "/interface wireless registration-table print without-paging"
     
     
     
    Zaphod
    Guest
    #20
    0
    30.03.2006 01:19:00
    Я написал небольшой кусок PHP-кода, который может залогиниться, выполнить команду и вывести данные. Для этого кода требуется libssh2 (http://sourceforge.net/projects/libssh2/) и ssh2 модуль для PHP5 (http://pecl.php.net/package/ssh2). Чтобы ввести команду, нужно использовать \r вместо \n.

    <?php

    $server = "x.x.x.x";
    $username = "user";
    $password = "pass";

    $methods = array(
     'kex' => 'diffie-hellman-group1-sha1'
    );

    $connection = ssh2_connect($server, 22, $methods);
    ssh2_auth_password($connection, $username, $password);
    $shell = ssh2_shell($connection){

    $cmd = "/system";

    $output = user_exec($shell,$cmd);
    $output = user_exec($shell,$cmd);

    print_r($output);

    function user_exec($shell,$cmd) {
       fwrite($shell, $cmd ."\r");
       sleep(1);
       $output = "";
         while($line = fgets($shell)) {
                  flush();
                  $output[] = $line;
       }
       return $output;
       fclose($shell);
    }

    ?>

    Наслаждайтесь!
     
     
     
    Страницы: 1
    Читают тему
    +7 495 320-55-52
    info@mikrotik.moscow
    Электрозаводская, Бауманская
    Москва, ул. Бакунинская, 84с21
    Конфиденциальность Оферта
    © 2026 «Mikrotik.Moscow»
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры