在多个设备上通过 SSH 自动运行多个命令

在多个设备上通过 SSH 自动运行多个命令

我有 100 多台设备具有相同的用户名和密码并启用了 SSH。

我想要实现的是对于每个设备,我想运行相同的命令来批量更改其密码。

我所做的是创建 2 个文件;第一个包含主机,第二个包含命令。

主机文件示例;

192.168.1.20
192.168.1.21
192.168.2.30
192.168.2.31

命令文件;

passwd -a des
%new-password%
%new-password%
grep -v users.1.password= /tmp/system.cfg > /tmp/system.cfg.new
echo users.1.password=`grep %user% /etc/passwd | awk -F: '{print $2}'` >> /tmp/system.cfg.new
cfgmtd -f /tmp/system.cfg.new -w
exit

我尝试执行以下命令,但由于两个原因而失败;

1 - 它要求我每次都允许自签名密钥。 2 - 它确实卡在输入部分

for host in $(cat hosts.txt); do ssh -u username@"$host" -pPasswd command.txt >"output.$host"; done

所以基本上我想连接所有设备(它们都有不同的自签名证书)并相应地更改其密码。

谢谢!

答案1

我会用安西布尔。 Ansible 专门用于在多个设备上使用 SSH 运行命令。您可以使用 ansible shell 一次运行一个命令,也可以使用 ansible playbook 一起运行多个命令。

如果您不想安装、设置和运行 ansbile,我会将其分为两部分。一旦编写了 scp 脚本,就可以将脚本发送到所有主机(可能是 /tmp 目录)。然后再运行该脚本。确保脚本在后台运行 (nohup) 并在本地设备中记录输出。也许是第三个脚本来检查日志/成功。

相关内容