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

时间:2018-05-04 08:30:36

标签: batch-file ssh putty plink

我正在尝试使用.bat脚本以自动方式通过SSH配置设备。在下面的代码片段中,我使用正确的顺序生成包含所需命令的文件,然后使用plink执行/读取文件到SSH连接。这导致命令未知的错误消息,我认为这是由于命令不是逐个执行但插入整个文件的事实引起的。

有没有人知道如何顺序执行多个命令?

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

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

2 个答案:

答案 0 :(得分:3)

设备确实可以将命令解释为一个。使用Plink / PuTTY -m开关指定的命令使用“exec”SSH通道执行,该通道仅用于单个命令。虽然一些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%

答案 1 :(得分:0)

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