Evita duplicatas ao ativar o ssh-agent no script upstart

1

Como parte de um script do Upstart, preciso iniciar o ssh-agent para carregar uma chave de implantação do GitHub, portanto, no script que tenho:

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

O problema é que, quando o serviço é reiniciado, o ssh-agent é reiniciado, deixando-me com várias cópias em execução. Tenho certeza que é porque as variáveis de ambiente são perdidas quando o script é executado novamente. Eu tentei o seguinte:

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

O problema aqui é que eu tenho um setuid no script, portanto, a chamada initctl não é permitida, pois o usuário não tem os privilégios necessários. Existe uma maneira fácil de exportar as variáveis de ambiente do script para que elas fiquem disponíveis no script de pós-parada ou as grave em um arquivo e obtenha o arquivo em pós-parada da melhor maneira de fazê-lo?

    
por Andrew Porritt 25.05.2016 / 17:32

1 resposta

0

Acabei dividindo o lançamento ssh-agent em uma tarefa única que inicia na inicialização e exporta o caminho para as configurações do agente (agora armazenadas em um arquivo), para que outros scripts de inicialização possam depender apenas do ssh-agent script de inicialização e fonte do arquivo para recuperar as variáveis de ambiente.

    
por 27.07.2016 / 16:41