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

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

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

ну как я понял

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

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

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

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

Ninosha ()
Ответ на: комментарий от 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

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

Ninosha ()