O ssh-agent é um programa guarda as chaves dos usuários e suas senhas enquanto o pc estiver ligado. O agente pode então usar as chaves para efetuar login em outros servidores sem que o usuário digite uma senha ou frase secreta novamente. Isso implementa uma forma de logon único (SSO).
O agente SSH é usado para autenticação de chave pública SSH. Ele usa chaves SSH para autenticação. Os usuários podem criar chaves SSH usando o comando ssh-keygen e instalá-las em servidores usando o comando ssh-copy-id. Veja nosso post a respeito: SSH: Usando ssh-keygen para Gerar Chaves SSH
Iniciando o ssh-agent
(agente ssh)
Na maioria dos sistemas Linux, o ssh-agent é configurado e executado automaticamente no login, e nenhuma ação adicional é necessária para usá-lo.
Se o ssh-agent não for iniciado automaticamente no login, ele pode ser iniciado manualmente com o comando
eval `ssh-agent`
ou
eval $(ssh-agent)
Executar somente o comando ssh-agent sem nada irá exibir o seguinte conteúdo:
maria@ti:~$ ssh-agent SSH_AUTH_SOCK=/tmp/ssh-XXXXXX35EyvM/agent.339614; export SSH_AUTH_SOCK; SSH_AGENT_PID=339615; export SSH_AGENT_PID; echo Agent pid 339615;
A variável de ambiente SSH_AUTH_SOCK é definida para apontar para um soquete de domínio unix usado para comunicação com o agente, e a variável de ambiente SSH_AGENT_PID é definida para o ID do processo do agente.
A maneira mais fácil de ver se o ssh-agent está iniciado é verificar se variável de ambiente SSH_AGENT_SOCK está com valor definido. Se estiver definido, o agente provavelmente está em execução. Pode ser verificado com esse comando:
maria@ti:~$ echo $SSH_AGENT_SOCK
Além do comando acima, podemos iniciar as variáveis SSH_AGENT_SOCK e SSH_AGENT_PID executando um dos comandos abaixo:
maria@ti:~$ eval `ssh-agent`
ou esse
maria@ti:~$ eval $(ssh-agent)
Adicionando chaves SSH ao Agente
Por padrão, o agente usa chaves SSH armazenadas no diretório .ssh que está dentro da pasta home do usuário. Em meu caso a pasta seria /home/maria/.ssh
O comando ssh-add é usado para adicionar identidades ao agente. Na forma mais simples, apenas execute ssh-add sem argumentos para adicionar os arquivos padrão: ~/.ssh/id_rsa, .ssh/id_dsa, ~/.ssh/id_ecdsa, ~/.ssh/id_ed25519 e ~/.ssh/identity. Se a chave não estive com nome padrão e dentro da pasta como acima, basta que você dê a ele o nome do arquivo de chave privada para adicionar como um argumento.
Vamos supor que minha chave é /home/maria/minhaChave.key então faço:
ssh-add /home/maria/minhaChave.key
O seguinte comando listará as chaves privadas atualmente acessíveis ao agente:
ssh-add -l
Vejamos na prática
maria@ti:~$ ssh-add minhaChave.key Identity added: minhaChave.key (maria@ti)
maria@ti:~$ ssh-add -l 521 SHA256:QC8zwwVabx8/0/kztAqNoTqZnxH4gzKcQ9R/5VRnuBc maria@ti (ECDSA)
Praticando ssh-agent e ssh-add
Na artigo passado criamos um par de chaves e levamos a chave pública para dentro do servidor com ip 192.168.4.34. Dentro desse servidor há o usuário joão. Veja o post: SSH: Usando ssh-keygen para Gerar Chaves SSH
Para acessar esse servidor sem senha fazemos o seguinte:
#1 execute o ssh-agent guardando as informações dentro do arquivo /home/maria/identidade. Como só as duas primeiras linhas importam então usamos | head -n2 ao final
maria@ti:~$ ssh-agent | head -n2 > /home/maria/identidade
#2 veja o conteúdo do arquivo:
maria@ti:~$ cat ~/identidade SSH_AUTH_SOCK=/tmp/ssh-XXXXXXjXNnXh/agent.355711; export SSH_AUTH_SOCK; SSH_AGENT_PID=355713; export SSH_AGENT_PID;
Se quiser, ou se necessário, poderá carregar o conteúdo do arquivo identidade com o comando source
maria@ti:~$ source identidade
#3 agora adicione a chave minhaChave.key
maria@ti:~$ ssh-add minhaChave.key Identity added: minhaChave.key (maria@ti)
Protinho, agora poderá acessar senha senha todos os computadores onde está sua chave pública colocada dentro do arquivo authorized_keys. Novamente, vimos isso no post anterior: SSH: Usando ssh-keygen para Gerar Chaves SSH
Apagando Todas as Chaves Armazenadas no SSH Agent
Para apagar todas as chaves basta executar ssh-add -D
maria@ti:~$ ssh-add -D All identities removed.
Para confirmar a exclusão das chaves guardadas no agente basta rodar:
maria@ti:~$ ssh-add -l The agent has no identities.
Opções para ssh-agent
O comando ssh-agent aceita as seguintes opções:
- -a bind_address Força a vinculação do soquete do domínio Unix ao caminho de arquivo fornecido, em vez do soquete padrão.
- -c Força a geração de comandos C-shell em stdout. Por padrão, o shell é detectado automaticamente.
- -d Ativa o modo de depuração.
- -E fingerprint_hash Especifica qual algoritmo usar para gerar impressões digitais de chave SSH. Os valores válidos incluem md5 e sha256.
- -k Mata o agente atualmente em execução.
- -s Força a geração de comandos Bourne shell (/bin/sh) em stdout. Por padrão, o shell é detectado automaticamente.
- -t life Especifica um número máximo de segundos que as identidades são mantidas no agente. O valor está em segundos, mas pode ser sufixado por m para minutos, h para horas, d para dias e w para semanas. Sem essa opção, o agente mantém as chaves em sua memória enquanto estiver em execução. Isso pode ser substituído ao executar o comando ssh-add.
Comment on “SSH: Usando ssh-agent e ssh-add Guardar Senha das Chaves”