检查许多远程服务器的状态

检查许多远程服务器的状态

我需要使用具有 sudo 访问权限的用户远程连接到 800 台服务器(按顺序 1、2、3)

  1. 检查系统日志的状态

    • 如果正在运行,请转到步骤 2
    • 如果没有重启d服务
  2. 进入/etc/sudoers远程机器

    • 喜欢sudo echo "ABC" >> /etc/sudoers
  3. 在本地计算机(我正在其中执行脚本)的本地文件中记录脚本中已完成的操作

我设法创建一个远程启动服务的脚本。

for i in `cat test1`

do 
{
echo "********************************************$i***************************************************"
sshpass -p '<password>' ssh -t abc@$i "sudo /etc/init.d/httpd start
}
done

注意:要连接的服务器在test1文件中

请让我知道如何将以上三个集成到一个脚本中

答案1

800 台服务器需要管理很多。您应该考虑研究其他解决方案。

  • 它在每台受管机器上使用一个主服务器和一个minion进程
  • 安西布尔这与盐类似。
  • 木偶 另一个管理软件
  • 根据您的发行版,您可以研究一个deb包含RPM您想要进行的所有更改的包,然后将其与存储库一起分发。
  • 一个类似的守护进程监控或者运行v可以监视系统并确保您的 syslogd 服务正在运行。

边注:直接编辑/etc/sudoers不再是最佳实践,相反,您应该考虑将自定义文件放入/etc/sudoers.d/ 并确保/etc/sudoers包含 includedir /etc/sudoers.d

答案2

如果(且仅当)您使用的命令实现了正常 shell 命令期望的正确返回值,您可以使用类似的方法来实现

sshpass -p '<password>' ssh -t abc@$i "command to check syslog || command to restart service && command to add sudo entry" && local command

这个想法是,在每个阶段,您都依赖于正确的返回值。如果command to check syslog失败则command to restart service执行,如果成功则command to add sudo entry执行。

ssh 命令应返回最后运行的命令的值,如果正常,则执行local command

当然,这是非常粗糙的,如果将这些命令分成单独的 ssh 命令并$?每次检查返回值会更稳定,以便您可以将任何问题回显到终端或日志文件。

答案3

编写一个包含您需要它执行的所有操作的脚本,然后使用 ssh 在远程服务器上运行它

参考

ssh root@MachineB 'bash -s' < local_script.sh

该脚本将像本地脚本一样运行机器B

相关内容