Как последовательно выполнить несколько команд на устройстве в пакетном файле Windows с помощью PuTTY/Plink?

Я пытаюсь настроить устройство через 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

person tomwassing    schedule 04.05.2018    source источник


Ответы (2)


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


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

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

Если вы используете PowerShell, вы также можете передать команды plink.exe, используя простой массив. например.,

    @(
       write-host "command 1"
       write-host "command 2"
       write-host "command 3"
       write-host "command 4"
    ) | plink.exe -batch $ipaddress -l $username -pw $password
person danny    schedule 08.04.2021