Como posso descobrir se uma conexão SSH foi estabelecida com ou sem encaminhamento de agente?
Estou tentando fazer o seguinte:
ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something
e comparar a saída, mas vejo apenas diferenças sutis.
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.Respostas:
Quando o agente ssh frente está habilitado no cliente (
ForwardAgent yes
on~/.ssh/config
) e também é habilitado no servidor remotoAllowAgentForwarding yes
, ao fazer logon para o servidor remoto a variável de ambienteSSH_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:
fonte
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 sshlocal
em todos os hosts.Agora, suponha que o encaminhamento do agente esteja desativado,
hostB
mas ativadohostC
.SSH_AUTH_SOCK
será ativado,hostD
mas estará "vazio". Obviamente, o agente é encaminhado, mas apenas dehostC
parahostD
. A corrente está quebrada.Agora, para verificar se realmente a chave está disponível,
hostD
basta ligarssh-add
. Ele sairá com o código 1 em qualquer caso, mas se a chave estiver indisponível, mostrará isso emstderr
:Assim, você pode verificar o
SSH_AUTH_SOCK
plus e garantir quessh_add
não haja saída.fonte