使用批处理文件 SSH 到多台机器

SSH to multiple machines using a batch file

我有大量 Linux 设备,我希望能够通过 SSH 连接到这些设备并更改网络掩码。我想创建一个批处理文件来执行此操作,以便我可以导出 IP 地址列表,然后 运行 一个批处理来更改网络掩码。

我希望我的脚本是这样的:

$user = "username"
$pass = "password"

dir /b cmd.exe -arp -a>List.txt
for /f "Tokens=1 Delims= " %%a in (List.txt) do (

echo SSH <IP ADDRESS from List.txt> $user $pass
echo sudo ifconfig eth0 netmask 255.255.255.192
echo exit
)

我怎样才能让它工作?我走的路线正确吗?

你非常接近。然而,batch 有一些细微差别,对于习惯于 *nix shell 脚本的人来说似乎违反直觉。

变量需要用set命令设置,=符号两边不能有空格。这是因为您可以批量在变量名中包含空格。说真的。

变量的名称类似于 %var% 而不是 $var,但您在设置值时不使用这些符号。

您不需要使用cmd.exe来调用arp;这是一个完全有效的批处理命令。由于 arp -a 输出的格式化方式,您需要缩小范围。 Find(或 findstr)与您即将到达的 grep 差不多。

set user="username"
set pass="password"

arp -a|find "Interface">List.txt

for /f "tokens=1" %%a in (List.txt) do (
    SSH %user%@%%a 'sudo ifconfig eth0 netmask 255.255.255.192'
)

还应注意,Windows 没有原生安装 SSH 客户端,因此您将不得不为此寻找第三方解决方案。