【问题标题】:Automate feeding the output of a command to a prompt自动将命令的输出提供给提示符
【发布时间】:2019-01-03 18:49:18
【问题描述】:

我有一个脚本,它读取一个文本文件,其中列出了所有节点:

node1
node2
node3
.
.
.

这是我的脚本:

#!/bin/bash

while read f; do
   ssh-copy-id myusername@"$f"
   ssh username@master.icinga.test.com
   icinga2 pki ticket --cn '$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 myusername@master.icinga.test.com icinga2 pki ticket --cn "$f" |
   ssh myusername@"$f" 'cat >/tmp/pkicode'
   scp ./zones.conf myusername@"$f":/etc/icinga2/zones.conf
done < linux-list.txt

1) 脚本应该登录到 Icinga 主服务器并为在该 linux-list.txt 文件中找到的每个节点运行命令 icinga2 pki ticket --cn '$f' 并为每个主机生成一个票证

2) 然后将这个生成的代码发送到每个节点($f)

完成上述所有命令后,脚本需要运行命令 icinga2 节点向导,该向导将启动问题/答案提示并需要有人键入答案,如下所示。

Icinga master 的 FQDN 是 master.icinga.test.com,它的 IP 是 10.20.20.1。 PKI 票证是我们之前在 Icinga 主机上生成的,每个主机都不同。

有什么办法可以自动完成吗?

Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
[PKI Ticket created earlier on the Icinga master]
Enter
Enter
Y
Y
Enter
Enter
N
N

谢谢

【问题讨论】:

  • 向导是为人类设计的,而不是为计算机设计的。检查您的工具是否具有可编写脚本的界面。
  • icinga.com/docs/icinga2/latest/doc/11-cli-commands/… 含糊地建议您应该在脚本中使用 node setup 而不是 node wizard
  • '$f' 在单引号中只产生文字字符串$f。要插入变量 f 的值,请使用双引号。但是这个命令无论如何都不应该在第一个循环中;你已经在第二个循环中模糊地正确了。
  • 如果你在同一个脚本中做这两件事,无论如何都不需要两个循环;只需将ssh-copy-id 移动到第二个循环的开头并摆脱第一个循环。我建议单独执行它们的原因是能够在无人看管的情况下,并行地,从另一个脚本等运行不需要用户交互的部分。
  • (供参考,本篇saga中的上一个问题是stackoverflow.com/questions/51525313/…

标签: bash icinga icinga2


【解决方案1】:

以后,尝试创建一个Minimal, Complete, and Verifiable example,因为那太长了,无法阅读。

但是,您似乎只想将一系列输入通过管道传送到提示符。您可以使用heredoc 来执行此操作,就像这样

PKI="some text whatever ticket thing blahblahblah"
somecmd << EOF
Y
Enter
master.icinga.test.com
Y
10.20.20.1
N
Y
$PKI
Enter
Enter
Y
Y
Enter
Enter
N
N
EOF

heredocs 可以做变量扩展。很酷。

【讨论】:

  • 谢谢,所以我应该创建一个文件(即 answers.txt),然后在 'icinga2 pki ticket --cn '$f' ' 命令之后调用它?你能详细说明一下吗?谢谢
  • 不,这是一个完整的答案。也许谷歌here document.
  • @IrinaI,请看 Tripleee 的评论
  • 由于某种原因我之前的评论没有出现,我将在哪里添加heredoc?我正在谷歌搜索,但仍不清楚 while 循环和 icinga 安装将如何连接到 heredoc。
猜你喜欢
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-09
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
相关资源
最近更新 更多