Я пытаюсь написать функцию обновления для удаленной малины, к которой я не буду направлять acesss. Это означает, что у меня есть веб-сервер, который отправляет команду над почтовыми запросами. Когда я хочу внести изменения в код малины, я посылаю ему "обновление" в качестве ответа малины с вопросом "nextInstruction".
Теперь я хочу, чтобы малина была чистой и густой.
мой общий communication.py:
#code beforhand
elif (decodedresponse['responseInfo']['data'][1]['command'] == "update"):
subprocess.call("./update.sh", shell=True)
#update
#os.system('sudo git clean -f -d')
#os.system('git pull')
#os.system('sudo reboot')
#code after
my update.sh:
#!/bin/bash
sudo git clean -f -d
git pull
sudo reboot
Проблема: если я выполняю update.sh, то он работает. Когда я запускаю скрипт python, видимо, он не получает ключи ssh в ~/.ssh.
Как я могу прикрепить ключ ssh к моему скрипту python? Я даже понимаю проблему? Есть ли более легкое решение для входа в мой удаленный ретранслятор gitlab?
Я бы предпочел, чтобы мой скрипт bash запускал скрипт python и решал действие/задание с помощью кода выхода pythons. Вот пример.
Примечание: для вызова sudo
может потребоваться ввести пароль, если вы не отредактируете файл sudoers (visudo
) и не добавите исключение для этого пользователя, запускающего скрипт и git.
p.py (убедитесь, что файл py имеет атрибут shebang (первая строка) и chmod +x
.
#!/usr/bin/python
# instead of >>subprocess.call("./update.sh", shell=True)
exit(100)
update.sh
#!/usr/bin/bash
$(./p.py)
JOB=$? # get pythons exitcode here
if [ $JOB -eq 100 ]; then
echo "update"
elif [ $JOB -eq 50 ]; then
echo "delete";
else
echo "nothing"
fi