试图理解bash脚本

试图理解bash脚本,bash,chef-infra,Bash,Chef Infra,该脚本应该将密钥从ossec服务器分发到其客户端 cat /usr/local/bin/dist-ossec-keys.sh #!/bin/sh # for host in chef-production2-doctor-simulator01 do echo "host is $host" key=`mktemp` grep $host /var/ossec/etc/client.keys > $key echo "key is $key" scp -i /var/

该脚本应该将密钥从ossec服务器分发到其客户端

cat /usr/local/bin/dist-ossec-keys.sh
#!/bin/sh
#

for host in chef-production2-doctor-simulator01
do
  echo "host is $host"
  key=`mktemp`
  grep $host /var/ossec/etc/client.keys > $key
  echo "key is $key"
  scp -i /var/ossec/.ssh/id_rsa -B -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $key ossecd@$host:/var/ossec/etc/client.keys >/dev/null 2>/dev/null
  rm $key
  ech "done" 
done
我逐行运行脚本,它的输出是

host is chef-production2-doctor-simulator01
key is /tmp/tmp.fAZqvNkJ9f
bash脚本是从模板创建的

它应该做什么?
为什么它不工作?

错误出现在
scp-i/var/ossec/…
行中

我糟糕的linux知识没有注意到
/dev/null 2>/dev/null


删除它会发现真正的错误(即
权限被拒绝(公钥)

为什么不使用厨师烹饪书分发密钥?不确定,你和chef有多远,但我想这正是通过chef管理基础设施时生活更轻松的时候。@StephenKing这就是我试图做的,它不起作用,所以我正在尝试调试它。基本上,这个脚本是通过一个chef客户端运行的?如果这些其他节点也运行chef,它将非常简单和干净(使用运行在那里的烹饪书)。1.脚本应该由服务器而不是客户端运行。chef软件只是一个包装器,可以快速运行这个脚本。你为什么认为它不起作用?你没有提到任何错误。
cat /var/ossec/etc/client.keys
001 #*#*#*#*#*#*#*#*#*#*#197.221.226 7196c76c568258e2ad836f8e1aa37e0758dee969f560ceb59be76879c3f3412d
002 test-agent 10.128.0.9 e2c9b117f26a202598007dcb4ec64e01f18000f9d820f6b3508a95e5313e6537