Eu me conecto a uma sessão de tela de longa duração no servidor Ubuntu 12.04 e uso isso como uma caixa de salto para outras coisas às quais me conecto. Como resultado, quero um agente ssh de longa duração nessa máquina. Para esse fim, tenho o seguinte no meu .bashrc:
pgrep -u pdickey ssh-agent > /dev/null || ssh-agent -a $HOME/.ssh-auth-sock
SSH_AUTH_SOCK=$HOME/.ssh-auth-sock
export SSH_AUTH_SOCK
Desde que minha sessão de tela nunca seja desconectada, isso funciona perfeitamente. Eu posso gerar novas telas, e todos recebem o mesmo agente. O problema surge quando eu me desconecto da máquina que tem a sessão ssh original. Em uma reconexão, recebo o seguinte:
$ ssh-add -l
Could not open a connection to your authentication agent.
Tudo que descobri sobre isso parece indicar que isso acontece quando o agente não está em execução, mas posso verificar se ele está em execução e a variável $ SSH_AUTH_SOCK está definida:
$ ps -fu pdickey | grep ssh-agent
pdickey 435 1 0 04:11 ? 00:00:00 ssh-agent -a /home/pdickey/.ssh-auth-sock
$ echo $SSH_AUTH_SOCK
/home/pdickey/.ssh-auth-sock
Então, por que diabos isso não está conectando? Eu possuo o soquete:
$ ls -la .ssh-auth-sock
srw------- 1 pdickey pdickey 0 Mar 10 04:33 .ssh-auth-sock=
Eu cheguei a ponto de tentar o processo, que depois de analisar todas as cargas da biblioteca, fornece a informação mais inútil:
64962 connect(3, {sa_family=AF_FILE, path="/home/pdickey/.ssh-auth-sock"}, 110) = -1 ECONNREFUSED (Connection refused)
Este é agora o limite do meu conhecimento linux / ubuntu / ssh. Por que uma tomada que possuo, criada por um processo que possuo, recusa a conexão de outro processo que possuo?