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 source
Befehl 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/bash
Tada!