Исполняемый файл CMD Line PUTTY, вызывающий скрипт

Вопрос или проблема

Я пытался автоматизировать процесс 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 — это часть набора инструментов PuTTY, предназначенная для автоматизации процессов удалённой работы через SSH, telnet и другие протоколы. Поскольку вы нацеливаетесь на автоматизацию, важно знать, что PLINK поддерживает передачу команд через стандартный ввод и может использовать скрипт, хранящий команды, которые вы хотите выполнить на удалённом хосте.

Для выполнения команды через PLINK, вам нужно использовать следующую синтаксис:

plink [опции] [пользователь@]хост [команда]

Чтобы использовать telnet, важно правильно указать параметры. Основная команда для вашего случая может выглядеть следующим образом:

plink -telnet <IP-адрес_хоста> -P <номер_порта> < cmds.txt

Примеры использования

  1. Использование скрипта для команд:

    • Создайте файл cmds.txt и заполните его командами, которые вы хотите выполнить на удалённом сервере. Пример:
    echo "Команда 1"
    echo "Команда 2"
  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 и автоматизировать выполнение команд на удалённом хосте. Если у вас возникнут дополнительные вопросы или проблемы, не стесняйтесь обратиться за помощью.

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

Капча загружается...