Respostas:
Quando o agente ssh frente está habilitado no cliente ( ForwardAgent yes
on ~/.ssh/config
) e também é habilitado no servidor remoto AllowAgentForwarding yes
, ao fazer logon para o servidor remoto a variável de ambiente SSH_AUTH_SOCK
deveria existir. Então, se você fizer login em outro servidor (sua chave pública deve residir nesse terceiro servidor), não será solicitada nenhuma senha.
Esclarecer:
home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
ssh-add
que fez o truque para mim. Eu trabalhava há meses sem saber disso. Depois, troquei os desktops do Unity para o LXDE e o encaminhamento de chave do agente parou de funcionar.
ssh-add
sempre que abrir uma nova janela do console. Então, eu adicionei essa linha de comando ao final de ~/.bash_profile
e agora o encaminhamento do agente de autenticação funciona sempre de forma transparente!
ssh-agent
configurado corretamente. Veja mah.everybody.org/docs/ssh
"${SSH_AUTH_SOCK}"
é um soquete, você pode testá-lo com #if [[ ! -S "${SSH_AUTH_SOCK}" ]]; then echo "warn: no forward agent detected ('${SSH_AUTH_SOCK}' is not a socket)"; fi
Verificar o ambiente SSH_AUTH_SOCK
é bom para conexões ssh diretas.
Se você usar proxies ( proxy_command
), poderá ter uma conexão parecida com:
local
-> hostA
-> hostB
-> hostC
->hostD
Se o encaminhamento do agente estiver ativo em todos esses hosts, SSH_AUTH_SOCK
será definido e "conterá" sua chave ssh local
em todos os hosts.
Agora, suponha que o encaminhamento do agente esteja desativado, hostB
mas ativado hostC
. SSH_AUTH_SOCK
será ativado, hostD
mas estará "vazio". Obviamente, o agente é encaminhado, mas apenas de hostC
para hostD
. A corrente está quebrada.
Agora, para verificar se realmente a chave está disponível, hostD
basta ligar ssh-add
. Ele sairá com o código 1 em qualquer caso, mas se a chave estiver indisponível, mostrará isso em stderr
:
Não foi possível abrir uma conexão com seu agente de autenticação.
Assim, você pode verificar o SSH_AUTH_SOCK
plus e garantir que ssh_add
não haja saída.
ssh-find-agent
script para encontrar e usar ssh-agents existentes, muito útil! O repositório tem alguns exemplos no README. Você poderá detectar se o ssh-agent está ativado dessa maneira, além de inspecionar os arquivos de configuração do SSH, em vez de examinar a saída do SSH.