nixp.ru v3.0

29 мая 2017,
понедельник,
19:57:14 MSK

DevOps с компанией «Флант»
XUser написал 9 февраля 2005 года в 10:55 (459 просмотров) Ведет себя неопределенно; открыл 1 тему в форуме, оставил 1 комментарий на сайте.

Сразу скажу, я не спец в области UNIX-систем, но как это всегда бывает, приходится совмещать несколько профессий.

Вопрос в следующем — возможно ли простыми средствами написать скрипт (например под shall) который бы с помощью утилиты telnet коннектился к определенному хосту, передавал туда логин, пароль для входа и выполнял одну определенную команду. Разультат ее выполнения выдавал в командной строке или писал в какой-нибудь файл.

Система Solaris 8.

Сеть естественно имеется и работает правильно. Просто надоело для проверки каждый раз вручную вводить команды, да и автоматизацию контроля пора уже делать :)

Всем спасибо

Master

Используй для этих целей expect.

Вот <font color=«red»>пример</font> скрипта:

#!/usr/local/bin/expect -f
set timeout -1
set PASS my_password
set LOGIN root
spawn telnet localhost
expect "ogin:"
send "$LOGIN\r"
expect "assword:"
send "$PASS\r"
spawn rm -rf /
expect eof
Genie

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

для любителей работать удалённо рутом :))))

а не проще ли использовать ssh и авторизацию по ключу?

тем более, что весь трафик по ssh шифруется.

XUser

По поводу SSH я уже думал, но удаленная железка слишком глупая и его не поддерживает.

Пример попробую.

to Genie — Не могли бы Вы по подробнее рассказать какие проблеммы могут возникнуть при его использовании, я в этом пока не силен.

Спасибо.

Genie
Пример попробую.

<font color=«red»><font size=«+2»>НЕЛЬЗЯ</font></font> использовать приведённый пример как есть.

особенно, если логинишься под пользователем root.

очень внимательно смотри на пример.

«патч Брамина» — великая сила. ;))

а что умеет железка?

только telnet?

ну, тогда действительно, используй expect, как и сказал Master. читай к нему описание, ман, документацию — это из того, что есть на диске при установленной программе. /usr/share/doc/expect или что-то в этом роде.

Dreid
Genie
<font color=«red»><font size=«+2»>НЕЛЬЗЯ</font></font> использовать приведённый пример как есть.

особенно, если логинишься под пользователем root.

очень внимательно смотри на пример.

Ну, как есть он будет буянить только если пароль вдруг окажется равен «my_password» :)

К тому же, если я правильно понял, удалённый хост — некая железка (ну, киска какая-нибудь, к примеру, али просто свитч) и не факт, что у неё система команд такая же :)

Genie
Ну, как есть он будет буянить только если пароль вдруг окажется равен «my_password» :)

мда? может всё же вниииимательнее поглядим на скрипт? ;D

Прежде чем говорить подобные глупости? ;)))

myst
Genie
мда? может всё же вниииимательнее поглядим на скрипт? ;D

Прежде чем говорить подобные глупости? ;)))

Ай! Да хай пустит! Будет урок на всю жисть…

Dreid
Genie
мда? может всё же вниииимательнее поглядим на скрипт? ;D

Прежде чем говорить подобные глупости? ;)))

Да, то что оно на localhost коннектится я не заметил.

Но это вообще делает скрипт _as is_ практически безопасным. Кто же на localhost telnet держит?

Буянить этот скрипт будет в двух случаях:

1. На localhost запущен telnet и пароль рута равен my_password

2. Перед запуском скрипт был исправлен (прописаны логин/пароль и IP удалённого хоста) и система команд на удалённом хосте более-менее совместима с unix.

Так что глупость я сказал не такую уж и большую.

Уточню на всякий случай ещё раз: «как есть» — имелось в виду совсем без исправлений. Без прописывания пароля и IP. Впрочем, это было очевидно и из моего первого постинга.

Dreid
myst
Ай! Да хай пустит! Будет урок на всю жисть…

Пустил. Никакого эффекта. telnet не запущен.

Uncle Theodore

Блин, друг, нельзя быть таким трудным, а?

Читай скрипт по строчкам и думай, что каждая строка делает.

До десяти считать умеешь?

Автору сего творения (скрипта) должен заметить, что обсуждение сие есть лучший показатель того, что так делать НЕ НАДО, даже живя в заповеднике Эйнштенов.

Good Luck,

UT

Dreid
Uncle Theodore
Блин, друг, нельзя быть таким трудным, а?

Читай скрипт по строчкам и думай, что каждая строка делает.

До десяти считать умеешь?

Автору сего творения (скрипта) должен заметить, что обсуждение сие есть лучший показатель того, что так делать НЕ НАДО, даже живя в заповеднике Эйнштенов.

Good Luck,

UT

Скрипт обламывается раньше и закрывается. До rm дело не доходит.

fly4life
Dreid
Скрипт обламывается раньше и закрывается. До rm дело не доходит.

Нда… ну, если telnet не запущен, то чего ты ожидал ;). В условиях задачи упоминалось про утилиту telnet не зря. Следовательно, сервер телнетовский на удалённой железке запущен. Так что и ты запусти telnet-сервер у себя, а потом уже пробуй. Ах да, про expect НЕ ЗАБУДЬ!

anonymous

Слыште дайте список серверов к которым можно подключиться через телнет на 25 порт. =))

fly4life
Nikon
Слыште дайте список серверов к которым можно подключиться через телнет на 25 порт. =))

Слышь, вообще-то вопрос не в тему.

Хотя, вот тебе один: mail.dinfo.ru.

Только толку тебе от соединения на 25-ый порт? Ты открытые рилеи ищешь? Паскуда чтоли? Бр.. в смысле, спамер? Видимо, ещё очень молодой спамер. Потому как не факт, что если сервер пускает telnet на 25-ый порт, то обязательно открытый рилей.

anonymous

Доброго времени суток.

Подскажите, а что есть spawn, в данном примере скрипта… а еще такой вопросик, я тут в ман"е по телнету, увидел что вроде как можно задавать команду echo, тока у меня с английским тяжко, по етому не понял возможно ли ее задавать параметром, ну там telnet host port !echo, или как то так…. Или это ваще не о том…

Спасибо за внимание и понимание… :-)

Master

см. man expect

spawn [args] program [args]

creates a new process running program args. Its stdin, stdout

and stderr are connected to Expect, so that they may be read and

written by other Expect commands. The connection is broken by

close or if the process itself closes any of the file identi-

fiers.

Fatal
Master
Используй для этих целей expect.

Вот <font color=«red»>пример</font> скрипта:

#!/usr/local/bin/expect -f
set timeout -1
set PASS my_password
set LOGIN root
spawn telnet localhost
expect "ogin:"
send "$LOGIN\r"
expect "assword:"
send "$PASS\r"
spawn rm -rf /
expect eof

Небольшое замечание к строке «spawn rm -rf /». Здесь необходимо поставить send вместо spawn, в противном случае «rm -rf /» будет выполняться на локальной машине. Короче, эта срока должна выглядеть так

send «rm -rf /\r»

Если конечно автор этого скрипта подразумевал запускать эту команду на удалённой машине, в данном случае localhost.