LINUX.ORG.RU

Скрипт для автоматического ввода данных при запросе через telnet

 , ,


0

1

Добрый день! Возникла задача автоматического ввода логина и пароля при запуске команды telnet ip (айпишники каждый раз разные). Нашла такой скрипт, используя expect:

#!/usr/bin/expect

set timeout 20

set ip [lindex $argv 0]

set user [lindex $argv 1]

set password [lindex $argv 2]

spawn telnet $ip

expect «login:»

send «$мойлогин\r»

expect «Password:»

send «$мойпароль»;

interact

но при его использовании выдает такую ошибку:

nina@nina-desktop:~$ ./testfile

spawn telnet

usage: telnet [-l user] [-a] host-name [port]

can’t read «n»: no such variable

while executing

«send «$n.igidbashyan\r»»

(file "./testfile" line 9)

у меня логин n.igidbashyan, не пойму почему ругается на букву n…может кто подскажет как быть?



Последнее исправление: Ninosha (всего исправлений: 2)

Ответ на: комментарий от TalkingMudcrab

Честно говоря, не совсем понимаю значения Markdown и Lorcode..да и не дает уже поменять. В этом есть принципиальная разница?

Ninosha
() автор топика
Ответ на: комментарий от Ninosha

Как думаешь, насколько читаемо написанное тобой? Если найдется тот, кому захочется разобраться в этой каше, круто, но шансы выше, если оформлено нормально, и тратить свое время на разбор не надо.

TalkingMudcrab
()
Ответ на: комментарий от TalkingMudcrab

разобралась, добавила пустые строки.

Ninosha
() автор топика

send «$мойлогин\r»
send «$мойпароль»;

Здесь не должно быть $.

Ну или надо вернуть использование $user и $password и запускать как подсказали выше.

xaizek ★★★★★
()
Последнее исправление: xaizek (всего исправлений: 1)
Ответ на: комментарий от Ninosha

ну как я понял

spawn telnet
usage: telnet [-l user] [-a] host-name [port]

telnet тут ругается на отсутствие обязательного параметра - имя или адрес хоста
т.е. команде скрипта «spawn telnet $ip» передался пустой $ip
ну это я так думаю, как там на самом деле хз =)

Minona ★★☆
()
Ответ на: комментарий от Minona

А можно ее на что-то другое заменить или как прописать так, чтобы не ругался на это? Я просто уже два дня шарюсь просто по всем ссылкам и форумам и нигде нет варианта с введением telnet ip без указания конкретного ip (поскольку вводится каждый раз разный, а логин и пароль один и тот же).

Ninosha
() автор топика
Ответ на: комментарий от xaizek

если добавить «–», то должно тоже работать.

send -- "$passwd\n"

anonymous
()

set password [lindex $argv 2]

зойчем ты палишь пароль в истории? используй expect_user.

anonymous
()
Ответ на: комментарий от Ninosha

я щас завис… ты понимаешь что делает каждая строчка этого скрипта?

#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet $ip
expect «login:»
send «$мойлогин\r»
expect «Password:»
send «$мойпароль»;
interact
Minona ★★☆
()
Ответ на: комментарий от anonymous

Тут никто не будет использовать мой пароль, так что без разницы. Вот когда для отдельного айпи прописываю все работает: #!/usr/bin/expect

spawn telnet 10.76.4.62

expect «login:»

send «мойлогин\r»

expect «Password:»

send «мойпароль\r»;

interact

Как сделать так, чтобы вместо 10.76.4.62 он все айпишники учитывал?

Ninosha
() автор топика
Ответ на: комментарий от Ninosha

так, выделяй все и копипасти в свой терминал

cat > testfile << EOF
#!/usr/bin/expect
set timeout 20
set ip [lindex $argv 0]
set user [lindex $argv 1]
set password [lindex $argv 2]
spawn telnet $ip
expect «login:»
send $user
expect «password:»
send $password
interact
EOF
chmod +x testfile

и используешь это вот так ./testfile ip login password

где ip,login,password заменяешь на свои

пробуй

Minona ★★☆
()
Последнее исправление: Minona (всего исправлений: 1)
Ответ на: комментарий от Ninosha

ip куда telnet полезет
из твоего же примера:
./testfile 10.76.4.62 login password
кстати, логин и пароль можешь прямо в скрипт прописать, вместо $user и $password
тогда просто
./testfile 10.76.4.62
./testfile 10.76.4.63
и так далее по айпишникам

Minona ★★☆
()
Ответ на: комментарий от Minona

Айпишников слишком много, поэтому и спрашивала можно ли как-то все указать, а не каждый по отдельности. Дело в том, что таким образом захожу в айпишники узлов, на которых видны подключения клиентов. Их нехило так..

Ninosha
() автор топика
Ответ на: комментарий от Minona

да, при необходимости уже ввожу show interface ethernet status если надо узнать порт. Обычно там много портов, оттуда и понимаю какой клиент мне нужен.

Ninosha
() автор топика
Ответ на: комментарий от Ninosha

скрипт для захода у тебя есть в ./testfile

пишешь bash-скрипт:

#!/bin/bash
for IP in $(cat ./iplist)
do
./testfile $IP
done

запихиваешь в файл ./iplist все ip узлов и запускаешь скрипт

Minona ★★☆
()
Ответ на: комментарий от Minona

Так у меня каждый раз разные узлы, у которых разные айпишники, их не две три штуки, и даже не 10, а целое море. По команде telnet ip вводится каждый раз разный ip. Если я пропишу какой-то один, то на остальные он снова будет запрашивать логин и пароль. Повторюсь, прописать все ip не вариант, их очень много.

Ninosha
() автор топика
Ответ на: комментарий от Ninosha

так сделай цикл в экспекте по файлу с адресами.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.