Автоматизация Telnet без команд появления / ожидания / отправки - PullRequest
0 голосов
/ 16 марта 2012

Я задавал этот вопрос раньше, но эта тема была закрыта, так как вопрос был расплывчатым. Так вот попробуй №2:

Я хочу иметь простой скрипт, который подключается к удаленной машине через telnet, затем выполняет команду ZAHO, а затем сохраняет вывод в файле cat.txt на моей локальной машине. Вот код, который я пробовал:

(echo "PPATIL"; sleep 1 ; echo "IDEA@2010" ; sleep 1;) |telnet 10.110.3.132 23<< EOF

ZAHO; > cat.txt

EOF

Когда я запускаю скрипт, происходит следующее:

Попытка 10.110.3.132 ... Подключено к 10.110.3.132. Escape-символ '^]'

После этого я возвращаюсь к своему приглашению оболочки без чего-либо происходящего.

Теперь, даже если я введу неверный пароль, я получаю ту же ошибку.

P.S .: spawn / Ожидайте / отправить нет, и единственная возможность войти в систему через Telnet.

Я тоже пробовал это

(echo "PPATIL"; sleep 1 ; echo "IDEA@2010" ; sleep 1;echo "ZAHO;";) |telnet 10.110.3.132 23

В этом случае, однако, удаленный компьютер подключается, он показывает мне приглашение имени пользователя, вводит имя пользователя, затем показывает запрос пароля, затем вводит пароль, спит секунду и затем добавляет «ZAHO;» к паролю и отключается.

Если я удаляю echo ZAHO;, он также отключается после ввода имени пользователя и пароля.

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Если вы не ограничены сценарием оболочки. Python имеет telnet интерфейс в своей стандартной библиотеке.На самом деле пример, приведенный на странице документации библиотеки, очень близок к тому, что вы хотите.

Возможно, Python не столь распространен, как shell, но он широко развернут и используется.

0 голосов
/ 16 марта 2012

В целом:

cmd | cmd2 << EOF
EOF

плохо определено. (Я не уверен, что грамматика оболочки поясняет это как неопределенное, или как определенную реализацию, или как, но, конечно, не будет делать то, что вы хотите.) У cmd2 может быть только один источник ввода, но вы пытаетесь дать ввод как из трубы, так и из heredoc. Вам нужно выбрать один. Возможно, вы можете попробовать:

{ cmd1; cat << EOF; } | cmd2
input 
EOF

но это довольно запутанно, и вам лучше написать скрипт для генерации желаемого ввода.

...