Как из скрипта выполнить команды в telnet

Программирование на sh, быть может немного про альтернативные языки
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
kharkov_max
капитан
Сообщения: 1862
Зарегистрирован: 2008-10-03 14:56:40

Как из скрипта выполнить команды в telnet

Непрочитанное сообщение kharkov_max » 2012-11-22 12:11:43

Добрый день.

Возможно ли из shell скрипта подключится к хосту по протоколу telnet и выполнить, сделать вывод нескольких команд.
Вручную команды работают, по процесс нужно автоматизировать скриптом.
Если не тяжело киньте примером ...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение FreeBSP » 2012-11-22 12:20:53

Код: Выделить всё

> cat  /usr/ports/lang/expect/pkg-descr
Expect is a program that performs programmed dialogue with other
interactive programs.  It is briefly described by its man page, expect(1).

It uses pseudo-tty's to control the child processes, so it is not affected
by programs that refuse to read from stdin or pipes. (eg: passwd(1) etc).

WWW: http://expect.nist.gov/
FAQ: http://expect.nist.gov/FAQ.html
>
сам не щупал
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
kharkov_max
капитан
Сообщения: 1862
Зарегистрирован: 2008-10-03 14:56:40

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение kharkov_max » 2012-11-22 12:30:10

Уже нашел про expect.

Такой вопрос, а будет ли возможным и как реализовать.
К примеру мне из вывода telnet необходимо получить данные, далее в shell их проанализировать (изменить, добавить) и передать в telnet на хост команду с параметрами.

Просто пока не совсем понимаю как это все можно связать в shell скрипт ...

Аватара пользователя
liet
мл. сержант
Сообщения: 78
Зарегистрирован: 2012-01-04 13:47:43
Откуда: UA, Kiev
Контактная информация:

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение liet » 2012-11-22 13:08:10

kharkov_max писал(а):Уже нашел про expect.

Такой вопрос, а будет ли возможным и как реализовать.
К примеру мне из вывода telnet необходимо получить данные, далее в shell их проанализировать (изменить, добавить) и передать в telnet на хост команду с параметрами.

Просто пока не совсем понимаю как это все можно связать в shell скрипт ...
если не ошибаюсь - можно. с экспектом не очень активно работал. в основном задача сводилась до выполнения определенных команд. но с другой стороны никто не запрещает писать консольные скриты на перле или пхп.
xxx: Иногда лучше сказать: "Я не знаю", чем пытаться что-то донести до дурака.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1862
Зарегистрирован: 2008-10-03 14:56:40

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение kharkov_max » 2012-11-22 13:31:29

Нашел empty http://www.opennet.ru/base/dev/interact ... s.txt.html
Вроде как то что нужно

Пишу

Код: Выделить всё

#!/bin/sh

empty -f -i in.fifo  -o out.fifo telnet -K 192.168.0.1 7777
empty -w -i out.fifo -o in.fifo "ogin:" "login\n"
empty -w -i out.fifo -o in.fifo "assword:" "password\n"
empty -s -o in.fifo "command > /usr/home/Script/keylist.txt\n"
empty -s -o in.fifo "exit\n"
В результате получаю

Код: Выделить всё

empty: Data stream is empty. Keyphrase wasn't found. Exit on timeout
empty: Data stream is empty. Keyphrase wasn't found. Exit on timeout
Такое ощущение что вообще не подключается телнетом
А скрипт на expect отработал нормально ...
Но expect будет тяжело выводить в файл и т.д. думаю использовать empty, только пока не понятно почему не телнетится ...

Аватара пользователя
kharkov_max
капитан
Сообщения: 1862
Зарегистрирован: 2008-10-03 14:56:40

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение kharkov_max » 2012-11-22 14:25:54

Ошибку поборол, просто empty уже висел в процессах.
Сделал killall -9 empty, и на всякий случай вставил в скрипт.

Но теперь при запуске скрипт просто висит и все, передача логина похоже не проходит.

Аватара пользователя
liet
мл. сержант
Сообщения: 78
Зарегистрирован: 2012-01-04 13:47:43
Откуда: UA, Kiev
Контактная информация:

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение liet » 2012-11-22 15:39:39

куча лишних переменных. выдирал из своего скрипта куски кода.

Код: Выделить всё

#!/usr/bin/perl
use Net::Telnet ();
use Switch;

my ($user, @passwd, $pwd, $t, $ip_sw, $ip_user, $port, $port1, $porti, $mac);
my $t;

sub catalyst
{
        $t = new Net::Telnet;
        $t->open($ip_sw);
        $t->waitfor('/username:.*/i');
        $t->print($user);
        print $user."\n";
        $t->waitfor('/password:.*/i');
        $t->print($pwd);
        print $pwd."\n";
        $t->print("enable");
        $t->waitfor('/password:.*/i');
        $t->print($pwd);
        $t->waitfor('/\S+\#/');
        $t->print("conf t");
        $t->waitfor('/\S+\#/');
        $t->print("no username admin");
        $t->waitfor('/\S+\#/');
        $t->print("username admin privilege 15 password **********");
        $t->waitfor('/\S+\#/');
        $t->print("no enable secret");
        $t->waitfor('/\S+\#/');
        $t->print("enable secret ********");
        $t->waitfor('/\S+\#/');
        $t->print("end");
        $t->waitfor('/\S+\#/');
        $t->print("write");
        $t->waitfor('/\S+\#/');
        $t->print("exit");
#       $t->waitfor("/Connection closed by foreign host./");
        $t->close;
}
как-то так сумбурно.
а дальше читаем о библиотеке Net::Telnet
xxx: Иногда лучше сказать: "Я не знаю", чем пытаться что-то донести до дурака.

Аватара пользователя
kharkov_max
капитан
Сообщения: 1862
Зарегистрирован: 2008-10-03 14:56:40

Re: Как из скрипта выполнить команды в telnet

Непрочитанное сообщение kharkov_max » 2012-11-22 16:17:36

Вот так вроде получается

(sleep 1 ; command1 ; sleep 2 ; command2 .....) | telnet IP port | grep ... | ... > ./filename.txt