Gentoo Logo

Aviso : Este documento não é válido e não é mais mantido.


Guia de keychain do Gentoo Linux

Conteúdo:

1.  Cenário geral

O problema em si

Então você tem todas aquelas amáveis máquinas Gentoo rodando sshd, mas é um pouco inconveniente para você ficar digitando todas senhas de log-in, certo? Ou talvez você tenha um script ou cron-job que precisa de um jeito conveniente de usar uma conexão de ssh. De qualquer jeito, existe uma solução para o problema, e ele começa com a autenticação de chaves públicas.

Como funciona a autenticação de chaves públicas?

Presuma que temos um cliente que quer conectar ao sshd em um servidor. O cliente primeiro gera um par de chaves e dá a chave pública ao servidor. Depois, quando o cliente tentar conectar, o servidor manda um desafio que é criptografado com a chave pública. Só quem tiver a chave privada correspondente (o cliente) conseguirá decodificá-la, então como você adivinhou, a resposta correta leva a uma autenticação com sucesso.

2.  Como usar a autenticação de chaves públicas

Gerando seu par de chaves

O primeiro passo é criar seu par de chaves. Para fazê-lo, nós iremos usar o comando ssh-keygen como a seguir:

Listagem de código 2.1: Gerando o par de chaves

$ ssh-keygen -t dsa
(Simplesmente aceite os valores padrão, e certifique-se de usar uma senha difícil de adivinhar)

Aviso: Certifique-se de escolher uma senha difícil de adivinhar, especialmente se a chave for usada para log-ins de root!

Você agora deve ter uma chave privada em ~/.ssh/id_dsa e uma chave pública em ~/.ssh/id_dsa.pub. Nós estamos prontos para copiar a chave pública para o host remoto.

Preparando o servidor

Nós iremos copiar o arquivo ~/.ssh/id_dsa.pub para o servidor que roda sshd. Nós também iremos adicioná-lo ao arquivo ~/.ssh/authorized_keys que pertence ao usuário conectando ao servidor. Aqui está um exemplo de como fazê-lo se você já tem acesso ssh no servidor.

Listagem de código 2.2: Copiando a chave pública para o server

$ scp ~/.ssh/id_dsa.pub server_user@server:~/myhost.pub
$ ssh server_user@server "cat ~/myhost.pub >> ~/.ssh/authorized_keys"
$ ssh server_user@server "cat ~/.ssh/authorized_keys"

A saída da última linha deve mostrar o conteúdo do arquivo ~/.ssh/authorized_keys. Certifique-se que parece estar certo.

Testando a configuração

Teoricamente, se tudo foi bem, e o daemon de ssh no servidor permite, nós podemos ter acesso ssh sem uma senha no servidor agora. Nós ainda precisaremos decodificar a chave privada no cliente com a senha que usamos antes, mas isso não deve ser confundido com a senha do usuário no servidor.

Listagem de código 2.3: Testando as chaves

$ ssh server_user@server

Espera-que ele pediu sua senha para o id_dsa, e você pode obter acesso de ssh ao server_user no servidor. Se não, faça log-in como server_user, e verifique o conteúdo de ~/.ssh/authorized_keys para ter certeza que cada entrada está em uma única linha. Você também deve verificar a configuração do sshd para ter certeza que ele prefere usar autorização de chave pública quando disponível.

Neste ponto, você provavelmente está pensado, "Para que serve isso, eu acabei de trocar uma senha por outra?!" Relaxe, a próxima seção irá mostrar exatamente como nós podemos usar isso para economizar nosso precioso tempo.

3.  Tornando autenticação de chaves públicas conveniente

Típico gerenciamento de chaves com ssh-agent

Se você esteve seguindo o guia, você provavelmente está pensando que seria muito bom se pudéssemos de alguma fora decodificar nossa(s) chave(s) privada(s) uma vez, e poder fazer ssh livremente, sem senhas. Você está com sorte, porque isso é exatamente o que o programa ssh-agent faz.

O programa ssh-agent é normalmente iniciado no começo de sua sessão de X, ou de um script de início de shell como ~/.bash_profile. Ele funciona criando um unix-socket, e registrando as variáveis de ambiente apropriadas para que todas aplicações subseqüentes tirem proveito de seus serviços conectando-se ao socket. Claramente, só faz sentido que ele comece no processo pai de sua sessão de X se você quiser usar o conjunto de chaves privadas decodificadas em todas aplicações de X subseqüentes.

Listagem de código 3.1: Preparando o ssh-agent

$ ssh-agent

Nota: O ssh-agent irá manter as chaves decodificadas até você matar o ssh-agent. Se você quiser dar uma expiração para as chaves, use o argumento -t como descrito em man ssh-agent.

Quando você rodar o ssh-agent, ele deve dizer o PID do ssh-agent que está rodando, e também configurar algumas variáveis de ambiente, chamadas SSH_AUTH_SOCK e SSH_AGENT_PID. Ele também deve adicionar automaticamente ~/.ssh/id_dsa a sua coleção e pedir a senha correspondente a você. Se você tiver outras chaves privadas que você quiser adicionar ao ssh-agent rodando, você pode usar o comando ssh-add como a seguir:

Listagem de código 3.2: Adicionando mais chaves ao ssh-agent

$ ssh-add algumarquivodechave

Agora está na hora da mágica. Já que você deve ter sua chave privada decodificada pronta, você deve poder fazer ssh no servidor sem digitar senhas.

Listagem de código 3.3: Ssh sem senhas

$ ssh server

Seria bom saber como desligar o ssh-agent caso você precise, não?

Listagem de código 3.4: Desligando o ssh-agent

$ ssh-agent -k

Nota: Se você teve problemas para fazer o ssh-agent funcionar, ele ainda pode estar rodando. Você pode matá-lo como qualquer outro processo rodando killall ssh-agent.

Se você quiser ainda mais conveniências do ssh-agent, prossiga para a próxima seção sobre o keychain. Tenha certeza de matar o ssh-agent rodando como no exemplo acima se você decidiu fazê-lo.

Tirando a última gota de conveniência do ssh-agent

O keychain irá permitir que você use o ssh-agent entre log-ins, e opcionalmente pedirá senhas cada vez que o usuário fizer log-in. Antes de adiantarmo-nos muito, vamos instalá-lo primeiro.

Listagem de código 3.5: Instalando o keychain

# emerge keychain

Presumindo que você teve sucesso, nós podemos usar o keychain livremente, Adicione o seguinte a seu ~/.bash_profile para ativá-lo:

Listagem de código 3.6: Ativando o keychain no .bash_profile

keychain ~/.ssh/id_dsa
. ~/.keychain/$HOSTNAME-sh

Nota: Você pode adicionar mais chaves privadas à linha de comando se você desejar. Também, se você quiser que ele paça senhas cada vez que você abrir um shell, coloque a opção --clear.

Nota: Se você não estiver usando bash, veja a seção EXAMPLES do man keychain para exemplos de uso com outros shells. A idéia é fazer os comandos rodarem cada vez que você usar um shell.

Vamos testá-lo. Primeiro certifique-se que você matou o ssh-agent da última seção, inicie um novo shell, normalmente ao fazer log-in, ou abrindo um novo terminal. Ele deve pedir sua senha para cada chave que você especificou na linha de comando. Todas shells abertas a partir deste ponto devem usar o ssh-agent novamente, permitindo que você faça conexões sem senha de ssh várias e várias vezes.

4.  Notas de conclusão

Considerações de segurança

Claro, o uso do ssh-agent pode adicionar um pouco de insegurança aseu sistema. Se outro usuário poder usar sua shell quando você for no banheiro, ele poderá fazer log-in em todos seus servidores sem senhas. Como resultado, é um risco para os servidores a que você está conectando-se, e você deve primeiro consultar a política de segurança local. Se você usá-lo, tenha certeza de tomar as medidas para que suas sessões sejam seguras.

Problemas comuns

A maior parte do guia deve funcionar bem, mas se você tiver problemas, você certamente deve saber de algumas coisas.

  • Se você não puder se conectar sem o ssh-agent, considere usar o ssh com a os argumentos -vvv para descobrir o que está acontecendo. Às vezes o servidor não está configurado para usar autenticação de chaves públicas, às vezes está configurado para pedir só senhas locais de qualquer jeito! Se for o caso, você deve também usar a opção -o com o ssh, ou mudar o sshd_config do servidor.
  • Se você estiver tendo problemas com o ssh-agent ou keychain, pode ser que você não esteja usando um shell que entende os comando que eles usam. Consulte as páginas de man para o ssh-agent e keychain para detalhes sobre como trabalhar com outros shells.


Imprimir

Atualizado 2 de dezembro de 2004

A versão original desta tradução não é mais mantida

Resumo: Este documento descreve como usar as chaves compartilhadas de ssh junto com o programa keychain. Ele presume conhecimento básico de criptografia de chaves públicas.

Eric Brown
Autor

Marcelo Góes
Tradutor

Donate to support our development efforts.

Copyright 2001-2014 Gentoo Foundation, Inc. Questions, Comments? Contact us.