Не мог отправить корень и пароль после telnet. Почему?
telnet board
sleep 3
echo -e "root\n"
sleep 1
echo -e "labrat\n"
Вы не можете использовать "простой" сценарий удара для взаимодействия с a telnet
сессия.
Согласно комментарию @Melebius, ответы на этот вопрос на StackOverflow предлагают, чтобы некоторые решения, как использование ожидали. Как более простая альтернатива можно передать команды по каналу к telnet
:
{ sleep 3 ; echo "root" ; sleep 1 ; echo "labrat" ; sleep 1; } | telnet board
Следует иметь в виду, что этот способ, которым сессия telnet завершается вскоре после входа, обрабатывается. Если Вы хотите создать автоматизированный сценарий, это могло бы быть достаточно (но затем expect
все еще лучший путь).
Если вместо этого Вы хотите открыть интерактивное telnet
сессия, но сохраняют себя "стычка" введения имени пользователя и пароля каждый раз, когда я боюсь, что нет простого решения. Можно передать имя пользователя через -l
флаг (т.е. telnet -l root board
) таким образом, необходимо ввести только пароль.
Похож expect
может использоваться успешно для автоматизации логинов telnet при отъезде интерактивной подсказки через interact
директива.
Простой базирующийся пример был бы:
#!/usr/bin/expect
spawn telnet board
sleep .3;
expect "login:"
send "root\r"
expect "password:"
send "labrat\r";
interact
Просто отредактируйте к своим потребностям.
Я не уверен, является ли это причиной проблемы (никогда не использовал telnet сам), но echo
уже добавляет новую строку при печати, таким образом, echo -e "root\n"
распечатает root
затем две новых строки. Вы, вероятно, хотите всего один, так использование echo "root"
или printf 'root\n'
вместо этого.