Передача команд через Telnet через скрипт Bash

Вопрос: Я пытаюсь автоматизировать сеанс telnet в Debian, но у меня возникают трудности с отправкой команд. Взглянув сюда, я хорошо понял, что мне нужно делать. spawn telnet localhost expect "login:" send "testn" expect "Password:" send "passwordn" sleep 10 //Time for the connection to be established send "lsn" Запустив скрипт, он правильно ввел имя пользователя. Он

Вопрос:

Я пытаюсь автоматизировать сеанс telnet в Debian, но у меня возникают трудности с отправкой команд.

Взглянув сюда, я хорошо понял, что мне нужно делать.

spawn telnet localhost expect «login:» send «testn» expect «Password:» send «passwordn» sleep 10 //Time for the connection to be established send «lsn»

Запустив скрипт, он правильно ввел имя пользователя. Он попал в поле пароля, и я предполагаю, что он его ввел (хотя я не могу быть уверен, так как пароли остаются пустыми в Debian при вводе). Он остановился для ожидания, а затем вернул меня на мой счет (корень). Он никогда не связывался с “тестом”.

Изменение моего кода, чтобы быть более похожим на мою ссылку:

spawn telnet localhost expect «login:» send «testn» expect «Password:» send «passwordn» interact

Это привело к тому, что он сразу же вошел в систему и подключился к моей “тестовой” учетной записи. Отсюда я попытался добавить команды после взаимодействия с помощью send, echo и просто набрав команду. Ничего не произойдет, пока я не выйду из сеанса telnet, тогда я получу эту ошибку.

Для отправки:

send: spawn id exp6 not open while executing «send «lsn»» (file «.telnet.sh» line 8)

Для эха:

invalid command name «echo» while executing «echo «lsn»» (file «.telnet.sh» line 8)

При имени команды “ls” неверное имя команды “ls” при выполнении “ls” (файл “.telnet.sh” строка 8)

Я понимаю, что взаимодействие дает контроль пользователю, но по какой-то причине это единственный способ заставить меня подключиться к учетной записи.

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

EDIT. После некоторых исследований я нашел эту ссылку, которая в конце концов дошла до решения, которое ожидает сценарий ожидания сразу после того, как все будет завершено, закрывая сеанс telnet. Они сказали, что исправили проблему, добавив ожидаемый “$”, чтобы сценарий знал, что больше команд отправляется по своему пути. Я попробовал просто использовать символ “$”, как предлагалось на сайте, но это закончило пинать меня снова. Поэтому я попробовал это.

Вот мой обновленный код:

#!/usr/bin/expect spawn telnet localhost expect «debian login» send «testn» expect «Password:» send «passwordn» expect «test@debian:~$» send «lsn»

Теперь я все еще в сессии telnet около 10 секунд, а затем меня отталкивает. Если я попытаюсь ввести команду за это время, она приостанавливается на это время, затем запускает команду, которую я набрал после закрытия сеанса telnet.

Прогресс идет. Медленно, но верно.

Лучший ответ:

Я решил эту проблему, ожидая снова bash после отправки моей команды.

Когда вы бегали так:

send «passwordr» expect «*$*» send «lsr»

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

Я обратился к этому, добавив дополнительный ожидаемый результат, который затем позволил моей команде обработать и получить результаты.

Вот мой последний код.

#!/usr/bin/expect spawn telnet localhost set timeout 10 expect «debian login» send «testr» expect «Password:» send «passwordr» expect «*$*» send «lsn» expect «*$*» send «command2» expect «*$*» send «command3» expect «*$*» send «exitr» Ответ №1

Проблема может быть в том, что вы отправляете команду ls перед ожиданием терминала, код ожидает, что “* $ *” ожидает терминал после ввода пароля, а регулярное выражение (* $ *) может варьироваться в зависимости от переменной среды PS1 сеанс telnet, ниже – это код, который будет отображать содержимое текущего рабочего каталога и выводится из системы

spawn telnet localhost set timeout 10 expect «debian login» send «testr» expect «Password:» send «passwordr» expect «*$*» send «lsr» expect «*$*» send «logoutr»

Оцените статью
Добавить комментарий