Detectando o encaminhamento do agente SSH

14

Como posso descobrir se uma conexão SSH foi estabelecida com ou sem o encaminhamento de agentes?

Estou tentando fazer o seguinte:

ssh-add -D (delete all stored keys)
ssh --vvv something
ssh-add (adding key)
ssh --vvv something

e compare a saída, mas vejo apenas diferenças sutis.

    
por shabunc 18.03.2011 / 07:23

2 respostas

16

Quando a encaminhamento do agente ssh estiver habilitada no cliente ( ForwardAgent yes on ~/.ssh/config ) e também estiver habilitada no servidor remoto AllowAgentForwarding yes , ao efetuar logon no servidor remoto, a variável de ambiente SSH_AUTH_SOCK deverá existir. Então, se você se conectar a outro servidor (sua chave pública deve residir neste terceiro servidor), você não deverá receber uma senha.

Para esclarecer:

home$ ssh-add
Enter passphrase ...
Identity added ...
$ ssh  hostA
hostA$ env | grep SSH_AUTH_SOCK
SSH_AUTH_SOCK=/tmp/...
$ ssh hostB
hostB$
    
por 18.08.2011 / 06:36
3

O ambiente de verificação para SSH_AUTH_SOCK é bom para conexões ssh diretas.

Se você usa proxies ( proxy_command ), você pode ter uma aparência semelhante a:

local - > hostA - > hostB - > hostC - > hostD

Se o encaminhamento de agentes estiver ativo em todos esses hosts, então SSH_AUTH_SOCK será definido e "contém" sua chave ssh de local em todos os hosts.

Agora, suponha que o encaminhamento de agentes esteja desativado em hostB , mas ativado em hostC . SSH_AUTH_SOCK será definido em hostD , mas na verdade será "vazio". É claro que o agente é encaminhado, mas apenas de hostC para hostD . A corrente está quebrada.

Agora, verifique se a chave está disponível em hostD . Você pode simplesmente chamar ssh-add . Ele sairá com o código 1 em qualquer caso, mas se a chave não estiver disponível, ele mostrará isso em stderr :

Could not open a connection to your authentication agent.

Assim, você pode verificar o SSH_AUTH_SOCK , além de garantir que ssh_add não tenha saída.

    
por 19.02.2015 / 09:53

Tags