Вопрос или проблема
Я пытался автоматизировать процесс telnet с помощью скрипта. Каждый раз, когда я нахожу подсказку, она указывает на PUTTY.
Я скачал PUTTY и его производные (plink.exe), чтобы мой скрипт заработал. Я не могу выйти за пределы нуля…
plink -telnet scriptfile.txt
(все файлы локальные)
просто, похоже, зависает на этом этапе. Каков правильный синтаксис?
Вы используете неправильное приложение plink.
Попробуйте с официальной помощью:
http://the.earth.li/~sgtatham/putty/0.58/htmldoc/Chapter7.html
Специфическая страница:
7.2.3.1 -batch: отключить все интерактивные уведомления
Я не уверен, что говорит другой ответ.
Простая синопсис командной строки для plink
такова:
plink [options] [user@]host [command]
и, следовательно, самое простое использование:
plink host
где host
может, разумеется, быть обычным именем хоста
(разрешаемым через DNS, NIS, файл hosts
или что-то еще) или (числовым) IP-адресом.
Вероятно, вы также можете использовать сохраненное имя профиля PuTTY
(которое инкапсулирует идентификацию хоста, вместе с набором параметров).
Возможно, вам потребуется использовать опцию -telnet
для того, чтобы указать plink
не использовать протокол rlogin
или SSH.
Я не знаю, что вы читали о скриптировании plink
.
Насколько я знаю, PuTTY не имеет такой возможности.
Что я сделал, так это автоматизировал удаленный вход (на самом деле использовал SSH) с помощью expect
, чтобы управлять plink
.
Я получил expect
как часть пакета ActiveTcl от ActiveState.
(Если вы поищете на этом сайте, вы должны найти инструкции о том, как это сделать.)
Затем я написал файл под названием foo.tcl
, который выглядит немного так:
# загрузить пакет Expect в Tcl package require Expect exp_spawn plink 10.10.10.10 expect : { # Ждать, когда сервер выдаст login: подсказку. exp_send -s "gman\r" # Мое имя пользователя (на самом деле нет). } expect word: { # Ждать, когда сервер выдаст password: подсказку. exp_send -s "iLoveCats\r" # Мой пароль (на самом деле нет). } ︙
и затем я запустил его, набрав tclsh foo.tcl
.
Удачи!
P.S. На самом деле не ставьте комментарии так, как я показал.
ActiveTcl разрешает комментарии, начинающиеся с #
, но, по-видимому, только на отдельных строках.
P.P.S. Аргумент command
в командной строке plink
относится к команде,
которую вы хотите, чтобы plink
отправил удаленному хосту после входа в него.
Я использую следующий код в .bat файле, и он работает очень хорошо.
plink hostip -P portnum < cmds.txt
В моем случае cmds.txt – это просто команды, которые я ввел бы, если бы использовал клиент putty.
Вы также можете получить вывод того, что возвращает plink для диагностических целей таким образом:
plink hostip -P portnum < cmds.txt > output.txt
Ответ или решение
To automate a telnet process using PLINK (a command-line interface for PuTTY), you need to correctly structure your command and ensure that your script file is properly configured. Below, I’ll guide you through the process of creating and executing a script using PLINK, addressing the critical points that you’ve encountered.
Что такое PLINK и как он работает?
PLINK — это часть набора инструментов PuTTY, предназначенная для автоматизации процессов удалённой работы через SSH, telnet и другие протоколы. Поскольку вы нацеливаетесь на автоматизацию, важно знать, что PLINK поддерживает передачу команд через стандартный ввод и может использовать скрипт, хранящий команды, которые вы хотите выполнить на удалённом хосте.
Основная команда PLINK
Для выполнения команды через PLINK, вам нужно использовать следующую синтаксис:
plink [опции] [пользователь@]хост [команда]
Чтобы использовать telnet, важно правильно указать параметры. Основная команда для вашего случая может выглядеть следующим образом:
plink -telnet <IP-адрес_хоста> -P <номер_порта> < cmds.txt
Примеры использования
-
Использование скрипта для команд:
- Создайте файл
cmds.txt
и заполните его командами, которые вы хотите выполнить на удалённом сервере. Пример:
echo "Команда 1" echo "Команда 2"
- Создайте файл
-
Запуск команды из
.bat
файла:- Создайте
.bat
файл, напримерrun_commands.bat
, с содержимым:
plink -telnet {доступный_хост} -P {номер_порта} < cmds.txt > output.txt
В этом примере
output.txt
будет содержать вывод команд, выполненных на удалённом хосте, что полезно для диагностики. - Создайте
Решение проблемы, когда команда зависает
Если команда зависает, это может быть связано с несколькими моментами:
-
Неправильный формат команды: Убедитесь, что используете правильный формат. Вы можете протестировать подключение без использования файла:
plink -telnet {IP-адрес} -P {номер_порта}
Затем вручную введите команды, чтобы проверить подключение.
-
Отсутствие необходимых прав: Убедитесь, что у вас есть права доступа к удалённому хосту и что telnet включен.
-
Проблемы с файлом
cmds.txt
: Убедитесь, что в файле нет синтаксических ошибок и каждая команда пишется на отдельной строке.
Использование Expect для автоматизации
Если вам требуется более сложная автоматизация, включая обработку интерактивного ввода, можно использовать инструменты, такие как Expect. Вот пример скрипта на Tcl:
# Загрузка пакета Expect
package require Expect
# Создание сессии с PLINK
set timeout -1
spawn plink -telnet {IP-адрес}
# Ожидаем запрос на ввод имени пользователя
expect "login: "
send "ваше_имя_пользователя\r"
# Ожидаем запрос на ввод пароля
expect "Password: "
send "ваш_пароль\r"
# После успешного входа можно отправлять команды
expect "# "
send "ваша_команда\r"
expect "# " # ожидание завершения команды
send "exit\r"
expect eof
Чтобы запустить этот скрипт, сохраните его в файл script.tcl
и выполните:
tclsh script.tcl
Заключение
Следуйте приведённым инструкциям, чтобы успешно запустить telnet процесс через PLINK и автоматизировать выполнение команд на удалённом хосте. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обратиться за помощью.