如何使用 PuTTY/Plink 在 Windows 批处理文件中在设备上顺序执行多个命令?

How to execute multiple commands sequentially on device in Windows batch file using PuTTY/Plink?

我正在尝试使用 .bat 脚本以自动方式通过 SSH 配置设备。在下面的代码片段中,我以正确的顺序生成了一个包含所需命令的文件,然后我 execute/read 使用 plink 将文件连接到 SSH 连接中。这样就报错commands are unknown,我想这是不是一个一个执行命令而是插入整个文件造成的。

有谁知道如何按顺序执行多个命令?

我试图将 commands.txt 文件重定向到 plink,但没有成功。此外,不可能为每个命令创建新的 SSH 连接,因为某些命令会将设备转换为配置模式。不幸的是,我尝试配置的设备不是基于 Unix 的,因此无法使用 &&; 链接命令,我需要插入命令然后 'press enter' 并继续。

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

设备确实有可能将命令解释为一个命令。使用 Plink/PuTTY -m 开关指定的命令使用 "exec" SSH 通道执行,该通道专为单个命令而设计。虽然某些 SSH 服务器(如 OpenSSH)甚至可以通过这种方式处理多个命令(因此您的批处理文件可以在那里工作),但这绝不是标准行为。您的设备可能使用了一些专有的 SSH 服务器,而不是普通的 OpenSSH。


如果你想模拟用户一个接一个地输入命令,请改用输入重定向(这样 "shell" Plink 会改用通道):

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

如果您使用的是 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