A maneira como o ssh-agent deve funcionar é que você tem um agente por sessão. O agente começa e termina com a sessão.
Uma sessão é iniciada quando você efetua login, não quando você abre um terminal ou quando inicia um shell. Executar sistematicamente ssh-agent
como parte do script de inicialização do seu shell está definitivamente errado.
Eu não sou um usuário do OSX, então pode estar faltando alguma coisa, mas, no meu entendimento, em versões não antigas do OSX (desde 10.5), o SSH é integrado com o keychain do OSX. Portanto, você não deve executar ssh-agent
. A variável SSH_AUTH_SOCK
deve apontar para um soquete launchd (o launchd fornece um serviço ssh-agent). Veja Como usar o Mac OS X Keychain com chaves SSH? e
Se você quiser ficar com ssh-agent
por algum motivo e quiser ter um único agente para todas as sessões (o que também faz sentido), você pode usar um caminho fixo para o soquete SSH. (Eu fiz isso no Windows.) Em seu .profile
, defina SSH_AUTH_SOCK
para um caminho fixo e inicie ssh-agent
se ainda não estiver em execução.
export SSH_AUTH_SOCK=~/.ssh/auth_sock
if ! fuser "$SSH_AUTH_SOCK" >/dev/null 2>/dev/null; then
# Nothing has the socket open, it means the agent isn't running
ssh-agent -a "$SSH_AUTH_SOCK" -s >~/.ssh/agent-info
fi
Observe que meu código não tenta matar o agente. Se você quiser matar o agente quando fizer logout, adicione uma instrução kill aos seus scripts de logout. Claro, se você matar todos os processos em execução como usuário, isso inclui o agente.