使用批处理文件 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 客户端,因此您将不得不为此寻找第三方解决方案。
我有大量 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 客户端,因此您将不得不为此寻找第三方解决方案。