Предотвращение дублирования при запуске ssh-agent в сценарии выскочки

В рамках сценария Upstart мне нужно запустить ssh-agent для загрузки ключа развертывания GitHub, поэтому в сценарии у меня есть:

eval "$(ssh-agent -s)"
ssh-add $HOME/.ssh/id_rsa

Проблема в том, что при перезапуске службы ssh-agent перезапускается, и мне остается работать с несколькими копиями. Я почти уверен, что это потому, что переменные среды теряются при повторном запуске скрипта. Я пробовал следующее:

script
    ...
    # Ensure SSH agent is running
    if [ -z "$SSH_AUTH_SOCK" ]; then
            eval "$(ssh-agent -s)" >/dev/null
            ssh-add $HOME/.ssh/id_rsa
            initctl set-env --global SSH_AUTH_SOCK=$SSH_AUTH_SOCK
            initctl set-env --global SSH_AGENT_PID=$SSH_AGENT_PID
            initctl set-env --global SSH_AGENT_LAUNCHER=upstart
    fi

exec ...
...
end script

post-stop script

    # Shut down SSH agent
    if [ "$SSH_AGENT_LAUNCHER" = upstart ]; then
            kill $SSH_AGENT_PID 2>/dev/null || true
            initctl unset-env --global SSH_AUTH_SOCK
            initctl unset-env --global SSH_AGENT_PID
            initctl unset-env --global SSH_AGENT_LAUNCHER
    fi

end script

Проблема в том, что у меня есть setuid в скрипте, поэтому вызов initctl не разрешен, так как у пользователя нет необходимые привилегии. Есть ли простой способ экспортировать переменные среды из сценария, чтобы они были доступны в сценарии после остановки, или запись их в файл и получение этого файла после остановки - лучший способ сделать это?

1
задан 25 May 2016 в 18:32
1 ответ

В итоге я разделил запуск ssh-agent на одноразовую задачу, которая запускается при запуске и экспортирует путь к настройкам агента (теперь хранящимся в файле), так что другие сценарии запуска могут просто зависеть от сценария запуска ssh-agent и исходить из файла для получения переменных среды.

0
ответ дан 4 December 2019 в 06:16

Теги

Похожие вопросы