Nova CLI liefert keine Ausgabe auf stderr und stdout

Nova CLI liefert keine Ausgabe auf stderr und stdout

folgendes Problem. Ich habe dieses Shell-Skript:

#!/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

Ich verwende dieses Skript, um beim Verbinden/Trennen über SSH einige Ports in meiner Firewall zu öffnen/schließen, indem ich meinem Server dynamisch eine bereits konfigurierte Sicherheitsgruppe hinzufüge – zumindest ist das die Idee. Leider scheinen die Nova-Befehle irgendwie überhaupt nicht ausgeführt zu werden, ich bekomme nichts in mein Protokoll. Da ich jetzt kein Stderr habe, ist das Debuggen ziemlich schwierig. Was mache ich falsch?

Wenn ich die Nova-Anmeldeinformationen beziehe und die Nova-Befehle manuell außerhalb eines Skripts ausführe, funktioniert alles einwandfrei.

Übrigens: Falls es hilft: Ich führe das alles in einem Docker-Container aus, der auf einem Ubuntu:14.04-Image basiert. Ja, ich weiß:Wenn Sie SSHD in einem Docker-Container verwenden, machen Sie es falsch.In diesem Fall gibt es einen Grund für das SSHD ;)

Antwort1

Irgendwie einfach, aber schließlich habe ich die Antwort gefunden. Das habe ich getan:

Mit Hilfe einesAntwort auf eine andere Frage bei StackOverflowIch habe die gesamte Ausgabe des Skripts in eine Datei umgeleitet und festgestellt, dass die Umgebungsvariablen für die Authentifizierung nicht abgerufen wurden. Warum: Weil die Shell den sourceBefehl nicht kannte. Warum? Weil ich dumm genug war, nicht zu prüfen, welche Shell ich verwendete.

Das Problem ließ sich einfach durch die Änderung zu beheben #/bin/sh. #!/bin/bashTada!

verwandte Informationen