qual é o propósito do ssh-agent?

41

Eu li a definição oficial:

ssh-agent é um programa para manter chaves privadas usadas para autenticação de chave pública (RSA, DSA, ECDSA). A idéia é que o ssh-agent é iniciado no início de uma sessão X ou uma sessão de login, e todas as outras janelas ou programas        são iniciados como clientes para o programa ssh-agent. Através do uso de variáveis de ambiente, o agente pode ser localizado e usado automaticamente para autenticação ao efetuar login em outras máquinas usando ssh (1).

".. um programa para manter chaves privadas .." - IMHO - chaves ssh são geradas pelo usuário com o comando ssh-keygen e simplesmente & simples armazenado em ~ / .ssh - por que preciso de algum daemon para manter essas chaves? Como exatamente eles os mantêm de qualquer maneira - eles não são apenas armazenados em .ssh?

"são iniciados como clientes para o programa ssh-agent" - não entendi. Onde alguém precisaria disso? Eu costumo usar o ssh assim:

 ssh -i ~/.ssh/private_key_name username@hostname

O que exatamente significa manual por "clientes" - quais clientes? Não basta executar o comando ssh do terminal para conectar - quais outros clientes estão lá e por que eles não podem simplesmente usar um caminho para esse arquivo privado ssh, assim como o comando ssh?

    
por agent_smith 16.04.2013 / 00:34

5 respostas

45

O agente SSH lida com a assinatura de dados de autenticação para você. Ao se autenticar em um servidor, você é obrigado a assinar alguns dados usando sua chave privada, para provar que você é, bem, você.

Como medida de segurança, a maioria das pessoas protege sensivelmente suas chaves privadas com uma senha, portanto, qualquer tentativa de autenticação exigiria que você inserisse essa frase secreta. Isso pode ser indesejável, então o agente ssh armazena em cache a chave para você e você só precisa inserir a senha uma vez, quando o agente quiser descriptografá-la (e nem sempre isso, já que o agente ssh pode ser integrado ao pam, que muitas distros fazem).

O agente SSH nunca entrega essas chaves a programas clientes, mas apenas apresenta um soquete sobre o qual os clientes podem enviar dados e sobre os quais ele responde com dados assinados. Um benefício colateral disso é que você pode usar sua chave privada mesmo com programas nos quais não confia plenamente.

Outro benefício do agente SSH é que ele pode ser encaminhado pelo SSH. Então quando você ssh para hospedar A, enquanto encaminha seu agente, você pode então ssh de A para outro host B sem precisar da sua chave presente (nem mesmo em formato criptografado) no host A.

    
por 16.04.2013 / 00:50
12

O benefício para ssh-agent é que você só precisa inserir sua senha uma vez. Se a sua chave RSA privada não for criptografada com uma frase secreta, o agente ssh não será necessário. O comando ssh seria um exemplo de um cliente.

    
por 16.04.2013 / 00:46
5

Se você está rotineiramente ssh ing em uma variedade de máquinas diferentes, cada uma com sua própria chave e frase-senha, então executar ssh-agent permite que você insira a frase secreta para cada chave uma vez 1 em o início de sua sessão e, em seguida, você pode autenticar-se em cada máquina quantas vezes quiser, sem precisar redigitar sua senha.

Um benefício adicional é que, de acordo com a página man , o agente nunca envia uma chave privada através de seu canal de solicitação; então, se você estiver pulando entre caixas diferentes, suas chaves privadas estarão protegidas.

1 Você pode definir o tempo life em que as chaves são mantidas no agente.

    
por 16.04.2013 / 00:48
5

artigo da Wikipédia provavelmente tem a melhor descrição:

The verification to the server is based on challenge-response authentication. ssh connects to the server with a user name and the request for a key. The ssh daemon gets the request and sends back a challenge based on the public key stored in the authentication file. ssh uses the private key to construct a key response, and sends it to the waiting sshd on the other end of the connection. It does not send the private key itself. The ssh daemon validates the key response, and if valid, grants access to the system. ssh-agent simplifies this by creating a socket that listens for SSH connections. The user simply starts ssh-agent, telling it how to find their keys (if they are not in the default location), enters the passphrase for each key to be used, on a one-time basis, and then ssh-agent handles the rest every time the user connects to a remote server.

Novamente textualmente do artigo da Wikipédia:

... ssh-agent creates a socket and then checks the connections from ssh. Everyone who is able to connect to this socket also has access to the ssh-agent. The permissions are set as in a usual Linux or Unix system. When the agent starts, it creates a new directory in /tmp with restrictive permissions. The socket is located in the folder.

Normalmente, ele é colocado em um sistema ou em arquivos rc do usuário, como $HOME/.bashrc ou $HOME/.profile (para shells bash), para que as variáveis de ambiente ssh-agent set sejam incorporadas completamente em seu ambiente.

No meu sistema Fedora 14, ele é iniciado muito cedo como parte do subsistema X11. Neste arquivo, /etc/X11/xinit/xinitrc-common :

# Prefix launch of session with ssh-agent if available and not already running.
SSH_AGENT=
if [ -z "$SSH_AGENT_PID" ] && [ -x /usr/bin/ssh-agent ]; then
    if [ "x$TMPDIR" != "x" ]; then
        SSH_AGENT="/usr/bin/ssh-agent /bin/env TMPDIR=$TMPDIR"
    else
        SSH_AGENT="/usr/bin/ssh-agent"
  fi
fi

A variável $SSH_AGENT é então usada em outros scripts de inicialização do X11, como aqui, /etc/X11/xinit/Xclients :

exec -l $SHELL -c "$SSH_AGENT $XCLIENTS_D/Xclients.$1.sh"

Ao incorporá-lo aqui, as seguintes variáveis de ambiente estão sendo definidas como parte de um shell pai, portanto, todos os garfos bifurcados também devem tê-los, por exemplo:

SSH_AUTH_SOCK=/tmp/ssh-PspRF18958/agent.18958; export SSH_AUTH_SOCK;
SSH_AGENT_PID=18959; export SSH_AGENT_PID;

Há um pouco mais de complexidade nisso, mas em poucas palavras, isso é basicamente o que está acontecendo com ssh-agent .

Por exemplo, no GNOME, ssh-agent é realmente lançado por usuário como um aplicativo de inicialização:

TL; DR

Linha de fundo, ssh-agent existe para que, quando as chaves ssh forem necessárias, você só precise desbloqueá-las uma vez com a frase secreta (supondo que elas tenham uma), e a partir de então elas estarão disponíveis em sua forma descriptografada (RAM).

    
por 16.04.2013 / 00:50
1

"são iniciados como clientes para o programa ssh-agent" refere-se à idéia de que o ssh-agent é iniciado durante a inicialização da sessão de login (local) para que todos os programas obtenham as variáveis de ambiente $SSH_AGENT_PID e $SSH_AUTH_SOCK que são necessárias para conectar o agente.

Outra vantagem de retirar o tratamento da chave privada do ssh é que o ssh-agent pode ser substituído pelo gpg-agent. Assim, você pode usar chaves OpenPGP (com capacidade de autenticação) para SSH. Essa é uma boa solução para chaves OpenPGP em um cartão inteligente.

    
por 16.04.2013 / 01:23