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

标签 linux batch-file 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
)

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

最佳答案

你非常接近。但是,批处理有一些细微差别,对于习惯 *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/

相关文章:

batch-file - 将 netconnectionid 批量传递给 netsh 接口(interface)命令

python - FFmpeg 从图像创建视频,从时间戳插入图像作为帧?

ssh - 如何通过端口转发创建SSH动态转发?

git - 警告 : Permanently added the RSA host key for IP address

powershell - Powershell入门帮助-重写旧的BAT + SQL文件

regex - 删除名称长于x的目录

linux - 用于测试输出并创建新的继续名称的 Shell 脚本

linux - 比格骨Linux : issues appending a line to a file

linux - 在远程主机上使用非返回脚本管理进程

c - 下面的c时间戳代码有什么错误?