Как последовательно выполнить несколько команд на устройстве в командном файле Windows, используя PuTTY / Plink? - PullRequest
0 голосов
/ 04 мая 2018

Я пытаюсь настроить устройство через SSH в автоматическом режиме, используя скрипт .bat. В приведенном ниже фрагменте я создаю файл с необходимыми командами в правильном порядке, после чего я выполняю / считываю файл в SSH-соединение, используя plink. Это приводит к сообщению об ошибке, что команды неизвестны, я думаю, это вызвано тем, что команды выполняются не одна за другой, а весь файл вставляется.

Кто-нибудь знает, как я могу последовательно выполнять несколько команд?

Я попытался перенаправить файл commands.txt в plink, но безуспешно. Также невозможно создать новое соединение SSH для каждой команды, потому что некоторые команды переводят устройство в режим конфигурации. К сожалению, устройство, которое я пытаюсь настроить, не основано на Unix, поэтому связывание команд с && или ; невозможно, мне необходимо вставить команду, а затем «нажать ввод» и продолжить.

config.bat

@echo off
SET /P IpAdres=IP: 
SET /p Username=Username:
SET /p Password=Password:
echo command 1 >> commands.txt
echo command 2 >> commands.txt
echo command 3 >> commands.txt
echo command 4 >> commands.txt
plink.exe -batch  %IpAdres% -l %Username% -pw %Password% -m commands.txt

1 Ответ

0 голосов
/ 04 мая 2018

Действительно возможно, что устройство интерпретирует команды как одну. Команда, указанная с помощью переключателя Plink / PuTTY -m, выполняется по каналу SSH "exec", который предназначен только для одной команды. Хотя некоторые SSH-серверы (например, OpenSSH) могут обрабатывать даже несколько команд таким образом (чтобы ваш пакетный файл работал там), это никоим образом не является стандартным поведением. Возможно, ваше устройство использует какой-то собственный SSH-сервер, а не обычный OpenSSH.


Если вы хотите смоделировать пользователя, который вводит команды одну за другой, вместо этого используйте перенаправление ввода (таким образом вместо «Plink» используется канал «shell»):

(
    echo command 1
    echo command 2
    echo command 3
    echo command 4
) | plink.exe -batch %IpAdres% -l %Username% -pw %Password%
...