![检查许多远程服务器的状态](https://linux22.com/image/96017/%E6%A3%80%E6%9F%A5%E8%AE%B8%E5%A4%9A%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E7%8A%B6%E6%80%81.png)
我需要使用具有 sudo 访问权限的用户远程连接到 800 台服务器(按顺序 1、2、3)
检查系统日志的状态
- 如果正在运行,请转到步骤 2
- 如果没有重启d服务
- 如果正在运行,请转到步骤 2
进入
/etc/sudoers
远程机器- 喜欢
sudo echo "ABC" >> /etc/sudoers
- 喜欢
在本地计算机(我正在其中执行脚本)的本地文件中记录脚本中已完成的操作
我设法创建一个远程启动服务的脚本。
for i in `cat test1`
do
{
echo "********************************************$i***************************************************"
sshpass -p '<password>' ssh -t abc@$i "sudo /etc/init.d/httpd start
}
done
注意:要连接的服务器在test1
文件中
请让我知道如何将以上三个集成到一个脚本中
答案1
答案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