
seguinte problema. Eu tenho este script de 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
Estou usando este script para abrir/fechar algumas portas em meu firewall ao conectar/desconectar via ssh adicionando dinamicamente um secgroup já configurado ao meu servidor - pelo menos essa é a ideia. Infelizmente, os comandos do nova de alguma forma parecem não ser executados, não recebo nada no meu log. Agora, como não tenho stderr, a depuração é meio difícil. O que estou fazendo de errado?
Quando eu obtenho as credenciais de login do nova e executo os comandos do nova manualmente fora de um script, tudo funciona perfeitamente bem.
A propósito: se ajudar: estou executando tudo isso dentro de um contêiner docker baseado em uma imagem Ubuntu:14.04. Sim, eu sei:Se você estiver usando sshd dentro de um contêiner docker, você está fazendo errado.Neste caso, há uma razão para o sshd;)
Responder1
De alguma forma simples, mas finalmente encontrei a resposta. Isto é o que eu fiz:
Com a ajuda de umresponda a outra pergunta no StackOverflowRedirecionei toda a saída do script para um arquivo e percebi que as variáveis de ambiente para autenticação não foram obtidas. Por quê: porque o shell não conhecia o source
comando. Por que? Porque fui estúpido o suficiente para não verificar a concha de bruxa que estava usando.
O problema foi simplesmente resolvido mudando #/bin/sh
para #!/bin/bash
. Tada!