
следующая проблема. Я получил этот скрипт оболочки:
#!/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 вне скрипта, все работает отлично.
Кстати: Если поможет: я запускаю все это внутри контейнера Docker на основе образа Ubuntu:14.04. Да, я знаю:Если вы используете sshd внутри контейнера Docker, вы делаете это неправильно.В этом случае есть причина для sshd ;)
решение1
Как-то просто, но в конце концов я нашел ответ. Вот что я сделал:
С помощьюответ на другой вопрос на StackOverflowЯ перенаправил весь вывод скрипта в файл и понял, что переменные окружения для аутентификации не были получены. Почему: Потому что оболочка не знала команду source
. Почему? Потому что я был настолько глуп, что не проверил, какую оболочку я использовал.
Проблема была просто решена путем замены #/bin/sh
на #!/bin/bash
. Тада!