我有一个脚本可以读取文本文件,其中列出了所有节点:
node1
node2
node3
.
.
.
这是我的脚本的一部分:
#!/bin/bash
while read f; do
ssh-copy-id myusername@"$f" "yum install -y epel-release; wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm;yum install https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm; yum install -y icinga2; yum install -y nagios-plugins-all; chown -R icinga:icinga /etc/icinga2 && chown -R icinga:icinga /var/lib/icinga2 && chown -R icinga:icinga /var/log/icinga2"
done < linux-list.txt
1)我希望该脚本登录到每个节点并运行一堆命令以安装Icinga-我尝试将它们全部补齐。
2)我希望脚本登录到Icinga主服务器并运行命令:
ssh username@icingamaster
icinga2 pki ticket --cn '$f'
3)然后将生成的代码发送到主机名($ f)
4)我希望将现有的/etc/icinga2/zones.conf
文件替换为我自己的zone.conf
能帮我吗,我不确定如何自动将日志记录到每台服务器中,并且应该自动运行命令。
谢谢
答案 0 :(得分:1)
在深入研究细节之前,也许您实际上应该查看车队管理工具,例如CFengine或Ansible。
ssh-copy-id
不允许您指定要运行的命令。无论如何,它是交互式的。我只需将SSH密钥分别安装在每个主机上,然后在无批处理的SSH上非交互式地在单独的批处理中运行所有自动化脚本。
密钥安装只是您当前的脚本减去错误的long命令:
while read f; do
ssh-copy-id myusername@"$f"
done < linux-list.txt
通过这种方式,您可以在每个主机上运行任意复杂的脚本。
while read f; do
ssh myusername@"$f" '
yum install -y epel-release
wget --no-check-certificate https://packages.icinga.org/epel/7/release/noarch/icinga-rpm-release-7-1.el7.centos.noarch.rpm
yum install icinga-rpm-release-7-1.el7.centos.noarch.rpm
yum install -y icinga2 nagios-plugins-all
chown -R icinga:icinga /etc/icinga2 /var/lib/icinga2 /var/log/icinga2' </dev/null
ssh username@icingamaster icinga2 pki ticket --cn "$f" |
ssh myusername@"$f" 'cat >/tmp/pkicode'
scp ./zones.conf myusername@"$f":/etc/icinga2/zones.conf
done < linux-list.txt
您会注意到我是如何在单引号内的多行中分解第一个命令的(命令然后不能轻易地将单引号引起来),并且不得不猜测一些有关您在后面的命令中的确切含义的东西-显然替换了占位符用您真正想要的东西进行编码。还请注意,有多少命令接受多个参数。因此您可以使用一个命令对yum install
或chown
等进行多件事。
我不是非常熟悉Yum,但是使用wget
下载软件包,然后分别在同一URL上运行yum
肯定看起来是错误的。 (也许安装下载的软件包的命令应该是rpm
而不是yum
?至少在Debian上,这是apt-get
和dpkg
之间的分工。)>
看起来myusername
基本上具有root用户访问权限-如果不是这种情况,请尝试安装sudo
并将myusername
作为root用户立即添加到sudoers
文件中运行这个;并且显然在每个特权命令之前添加sudo
。
同样,这些是您真的不想重新发明的轮子。首先安装CFengine或Ansible,会使其余部分变得更加简单,尽管显然也略有不同。