我有大量 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
)
我怎样才能让它工作?我走的路线正确吗?
最佳答案
你非常接近。但是,批处理有一些细微差别,对于习惯 *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 到多台机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30252777/