Nova CLI 在 stderr 和 stdout 上输出零

Nova CLI 在 stderr 和 stdout 上输出零

出现以下问题。我得到了这个 shell 脚本:

#!/bin/sh

# Provide log for debugging
if [ ! -f /home/some-user/port-control.log ]; then
  touch /home/some-user/port-control.log
  chown some-user /home/some-user/port-control.log
fi

# Load environment variables for authentication
source /home/some-user/.openstack/nova-openrc.sh

# Open ports at login
if [ "$PAM_TYPE" = "open_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Opening ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug add-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

# Close ports at logout
if [ "$PAM_TYPE" = "close_session" ] && [ "$PAM_USER" = "some-user" ]; then
  echo "Closing ports ... Nova response:" >> /home/some-user/port-control.log
  nova --debug remove-secgroup some-server some-secgroup &>> /home/some-user/port-control.log
fi

我使用此脚本在通过 ssh 连接/断开连接时打开/关闭防火墙中的某些端口,方法是将已配置的 secgroup 动态添加到我的服务器 - 至少这是个想法。不幸的是,nova 命令似乎根本无法执行,我的日志中什么都没有。现在,由于没有 stderr,调试有点困难。我做错了什么?

当我获取 nova 登录凭据并在脚本之外手动执行 nova 命令时,一切都运行正常。

顺便说一句:如果有帮助的话:我正在基于 Ubuntu:14.04 镜像的 docker 容器中运行所有这些。是的,我知道:如果您在 docker 容器内使用 sshd,那么您做错了。在这种情况下,sshd 是有原因的;)

答案1

虽然有点简单,但我终于找到了答案。我做的是:

回答 StackOverflow 上的另一个问题我将整个脚本的输出重定向到一个文件,然后发现身份验证的环境变量没有被获取。原因:因为 shell 不知道该source命令。为什么?因为我太蠢了,没有检查我使用的 shell。

#/bin/sh只需更改为即可轻松解决该问题#!/bin/bash。Tada!

相关内容