Detectando o encaminhamento de agente SSH

19

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.

shabunc
fonte
1
Para referência, consulte este belo artigo: blog.joncairns.com/2013/12/understanding-ssh-agent-and-ssh-add . Ele indica um bom repositório do GitHub com um ssh-find-agentscript 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.
trusktr

Respostas:

21

Quando o agente ssh frente está habilitado no cliente ( ForwardAgent yeson ~/.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_SOCKdeveria 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$
Torian
fonte
1
O ssh-addque 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.
26412 Mark Hudson
@ MarkHudson Por algum motivo, ao executar o LXDE, você deve executar ssh-addsempre que abrir uma nova janela do console. Então, eu adicionei essa linha de comando ao final de ~/.bash_profilee agora o encaminhamento do agente de autenticação funciona sempre de forma transparente!
Paul Bernal
@PaulBernal Você realmente não precisa fazer isso, imagino que não tenha ssh-agentconfigurado corretamente. Veja mah.everybody.org/docs/ssh
Michael Mrozek
1
m2c: o arquivo "${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
Boop
4

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_SOCKserá definido e "conterá" sua chave ssh localem todos os hosts.

Agora, suponha que o encaminhamento do agente esteja desativado, hostBmas ativado hostC. SSH_AUTH_SOCKserá ativado, hostDmas estará "vazio". Obviamente, o agente é encaminhado, mas apenas de hostCpara hostD. A corrente está quebrada.

Agora, para verificar se realmente a chave está disponível, hostDbasta 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_SOCKplus e garantir que ssh_addnão haja saída.

udondan
fonte