Autenticação por desafio e resposta no SSH

Atuando sobre o protocolo SSL, o Secure SHell permite logar-se em uma máquina e executar comandos, em uma versão segura do antigo telnet. Este artigo não ensinará a instalar o SSH, mas sim a usar alguns recursos especiais, particularmente o do login por desafio e resposta (que usa uma chave pública e privada). Porém não apenas usar, mas explicar como funciona nos bastidores.

[ Hits: 147.711 ]

Por: Elgio Schlemer em 27/07/2009 | Blog: https://profelgio.duckdns.org/~elgio


Configuração do ssh para autenticação por desafio e resposta



A autenticação por desafio resposta no ssh deve estar habilitada no ssh server. Por minha experiência, todos os servidores ssh já vem com isto habilitado, mas convém verificar. Apenas verifique se a informação PubkeyAuthentication no /etc/ssh/sshd_config não está em "no". Normalmente ela está comentada no arquivo, o que significa que está ativa (o padrão é permitir):

# grep Pubkey /etc/ssh/sshd_config
#PubkeyAuthentication yes

Se ela estiver comentada ou com "yes", tudo bem. Mas se estiver com "no", comente a regra ou mude para "yes" e reinicie o ssh server.

Com o servidor configurado para aceitar esta forma de autenticação, deve-se ainda realizar os seguintes passos:
  1. criar um par de chaves
  2. instalar a tua chave pública no servidor

Usarei o usuário fulano como teste neste artigo.

Criação do par de chaves

Usuário fulano tem um login e senha no servidor 10.2.3.4. O cliente é a máquina didaké (nome do meu notebook). Primeiro ele se logou com seu usuário e senha, só para testar:

ssh 10.2.3.4
The authenticity of host '10.2.3.4 (10.2.3.4)' can't be established.
RSA key fingerprint is fb:a9:ac:b6:3d:3f:42:76:11:cc:44:2f:7f:55:49:97.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.2.3.4' (RSA) to the list of known hosts.
Password:
Have a lot of fun...

Voltando a máquina cliente, a didaké, ele cria seu par de chaves com o ssh-keygen. Os parâmetros indicam criar chaves usando o algoritmo dsa e com 1024 bits de tamanho. Se você não especificar o DSA, o algoritmo RSA será usado. O protocolo RSA não é usado por padrão no ssh e não funcionará a menos que você coloque o parâmetro RSAAuthentication yes no /etc/ssh/sshd_config. Este é desabilitado por padrão.

ssh-keygen -b 1024 -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/fulano/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/fulano/.ssh/id_dsa.
Your public key has been saved in /home/fulano/.ssh/id_dsa.pub.
The key fingerprint is:
4e:e4:ab:5c:5d:06:58:83:95:4a:77:1d:a0:7d:e7:ba fulano@didake
The key's randomart image is:
+--[ DSA 1024]----+ 
|         o+..o.. | 
|        ooo+. .  | 
|       .ooo.. . .| 
|       o.  . . o | 
|        S   o   .| 
|       o o o   . | 
|        + .   .  | 
|     . o       . | 
|      o       E  | 
+-----------------+ 

Quando ele perguntar "Enter file in which to save the key (/home/fulano/.ssh/id_dsa): " simplesmente dê um enter aceitando esta sugestão.

Como frase de passagem eu coloquei "Viva o Linux 2009". Pode ser qualquer coisa, mas tome cuidado pois você deve digitar exatamente a mesma coisa quando solicitado. Se digitar "Viva o LINUX 2009" já não será a mesma frase, pois Linux está tudo em caixa alta. Desaconselha-se deixar sem frase de passagem, mas é uma configuração possível.

Instalação da chave pública no servidor

A instalação da chave pública no servidor consiste em simplesmente colocar ela dentro do arquivo ~/.ssh/authorized_keys. Este arquivo pode ter várias chaves públicas, não apenas uma.

Para realizar esta tarefa o usuário fulano precisará logar-se no servidor, usando ainda sua senha. A chave pública criada está em ~/.ssh/id_dsa.pub no cliente e home do fulano. Ela é texto puro (base64) logo pode-se até dar um cat nela:

cat id_dsa.pub
ssh-dss AAAAB3NzaC1kc3MAAACBAKaOHlNYzozRRr0Ub1kAi/mBap55fQCda0t4T4rZnskdqX /gMnKvLP8B514b3Oq8exNCkTym6nyv1LyxxG1VmhpjKN8N8eDaErp/8qEif/GvH3HaFx4GJBWFed4Z6K9HkxsBy2yFwfcBmkvGFP3ggMwhBnKYFf7DSa9/0QzHDDx3AAAAFQDEb5c3RMsEo8xU6YsvVXnIlJteLQAAAIA+3Oa2X2oW2gprZkCRe7JE +KWvH+O9xjep/7l6iGFww9IDj35VgEHMzAr6LPvw+rAOB1P5qoXZr3hbTU6pzfHiSLy6UD G+LzHLRbyImZOH/p+n7hWtEfZs6mO5ZuJFxO3fStQKWy0r48XUEaduHY5PGQc+sa/fpjyS2BPToM46XgAAAIAzsUHfOZnFhGK5cmMGjEFyjQBIKqYxRo3pR2H0au/ObwrKan6rCEqWropJElI234AeIymOS2h4Hr3lHnbmyXsxxCt14xqE7ZQlq5X7DV2QCl 0PUcgGlbVSLNTGLXapW1KN2tiBv7u8Q0agNgZ3ek3XHTKtZ6jVm0eb/ACsg0D+Sw== fulano@didake

Não faça o mesmo para a chave privada, pois ela não é em formato texto, é binário.

Então, basta pegar esta sequência esquisita de caracteres e copiá-la, assim como está, para o servidor. No Gnome pode-se até mesmo usar o recurso de copiar e colar do sistema, como demonstra a sequência de imagens.
Linux: Autenticação por desafio e resposta no ssh
Selecionando a chave pública no cliente, arquivo ~/.ssh/id_dsa.pub e usando o "Copy" do próprio Gnome.
Linux: Autenticação por desafio e resposta no ssh
Após, loga-se no servidor 10.2.3.4 ainda usando sua senha, e coloca-se a chave dentro do arquivo authorized_keys em ~/.ssh. No caso eu usei o simples cat com redirecionamento (cat >> authorized_keys).
Linux: Autenticação por desafio e resposta no ssh
Ao final, após colar, deve-se pressionar Control+D e o arquivo está com a chave pública. Na imagem, após o término, executei um cat para verificar.

Outras tantas formas podem ser usadas para obter-se o mesmo resultado, como simplesmente editar o arquivo authorized-keys com algum editor qualquer. O fato é que ele deve ter a chave pública.

Por fim, após a instalação, pode-se verificar se está funcionando. fulano sai do servidor e tenta-se logar novamente:

ssh 10.2.3.4
Enter passphrase for key '/home/fulano/.ssh/id_dsa':
Last login: Mon Jul 27 13:40:02 2009 from 10.1.0.10
Have a lot of fun...

Agora ele pediu a frase de passagem que protege a chave pública. No caso eu tive que digitar o "Viva o Linux 2009" para poder me logar.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Como funciona o desafio resposta
   3. Desafio e resposta no ssh
   4. Configuração do ssh para autenticação por desafio e resposta
   5. Conclusão
   6. Referências
Outros artigos deste autor

A mágica do dc

Cuidado com números em Ponto Flutuante

Criptografia chave simétrica de bloco e de fluxo

Criptografia assimétrica com o RSA

Parâmetros interessantes do scanf e do printf em C

Leitura recomendada

Bloqueio de usuários com página de aviso

Tornando o OpenBSD stable

Metasploit Adobe Exploit

Introdução a criptografia

VPN em Linux com OpenVPN

  
Comentários
[1] Comentário enviado por removido em 27/07/2009 - 16:53h

Esclarecedor. Muito bom.

[2] Comentário enviado por cesar em 27/07/2009 - 17:04h

Boa elgio,

[]'s

[3] Comentário enviado por Lisandro em 28/07/2009 - 08:07h

Muito interessante e em linguagem acessível.

[4] Comentário enviado por renato.leite em 28/07/2009 - 17:43h

Muito bom, Parabéns.

[5] Comentário enviado por ghodoy em 29/07/2009 - 09:33h

Execelente artigo..muito esclaredor

[6] Comentário enviado por elgio em 31/07/2009 - 09:58h

O que pode ser considerado uma continuação deste artigo:
http://www.vivaolinux.com.br/artigo/Tuneis-cifrados-com-SSH/

[7] Comentário enviado por mda_deb em 31/07/2009 - 21:01h

Parabéns elgio, mais um artigo de qualidade.


[8] Comentário enviado por rafaelalmeida em 02/09/2009 - 10:35h

Muito bom artigo!
Só uma dúvida, após logar com a minha frase, estarei no home ou com os privilégios de qual usuário? O usuário que eu estava logado quando criei a chave?

[9] Comentário enviado por ikichl em 23/09/2009 - 09:22h

Bom dia
estou com um grande problema aqui tenho um sistema em php que faz conexoes
automaticas atravez e chave de seguranca, instalada na maquina remota, porem cada
nova conexao ele pede a confirmacao antes e conectar a primeira vez:

Are you sure you want to continue connecting (yes/no)?

ja tentei diversos meio para auto aceitar a conexao, mas sempre sem sucesso
echo -e "yes" | ssh root@200.175.121.18

[10] Comentário enviado por edinhow em 06/11/2009 - 07:50h

Artigo muito bom! Parabéns!



[11] Comentário enviado por sfrique em 01/01/2010 - 20:12h

Artigo muito bom, mas para copiar a chave nao seria melhor usar o ssh-copy-id ?

Segue o comando:

$ssh-copy-id -i ~/.ssh/id_dsa.pub login@servidor

Basta o sftp estar habilitado no servidor!

Funciona com a chave rsa, então acho que deve funcionar com a dsa tambem!

Vlw!


[12] Comentário enviado por elgio em 01/01/2010 - 20:38h

Henrique:

SIM, pode ser usado ssh-copy-id sim.

Mas observe que o ssh-copy-id não passa de um script SHELL :-O

E bem pequeno, alias. Bem simples de entender. Tirando a parte de testes se o usuário passou o que precisava e se a chave existe, etc, etc, a cópia é simplesmente isto:

{ eval "$GET_ID" ; } | ssh $1 "umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys" || exit 1

Sendo que a variável GET_ID foi previamente preenchida com a chave.

Não precisa, neste caso, do SFTP. Ele faz usando o ssh mesmo.

Boa dia. Valeu.

E bem vindo ao Viva o Linux!

[13] Comentário enviado por anonymous em 12/03/2010 - 13:59h

EXCELENTE ARTIGO!!!

[14] Comentário enviado por aline.abreu em 15/10/2010 - 14:38h

Elgio,

Gostei muito do seu artigo!
Só me confirma uma coisa: Pra cada máquina que eu usar, terei que ter um par de chaves ou posso usar a mesma para várias máquinas que eu uso?

Aline

[15] Comentário enviado por VagnerFonseca em 22/10/2010 - 10:50h

Aline,

Respondendo sua pergunta, você pode usar sim a mesma chave pública para logar em várias máquinas diferentes, assim basta que o usuário que você estiver utilizando naquele momento esteja com a chave privada no seu diretório .ssh.

Elgio,

Muito bom artigo, continue assim.

[16] Comentário enviado por removido em 26/09/2011 - 23:50h

Fantástico, parabéns elgio

[17] Comentário enviado por Thiago Andreotti em 26/12/2011 - 13:48h

O site Preciso Disso está contratando um web developer senior (back end) com forte conhecimento em PHP em cake e outros frameworks. Além de participar do desenvolvimento da versão 2.0 do site (em andamento) o desenvolvedor terá que criar aplicativos de busca, vídeos e notícias para redes sociais.O candidato deve ter perfil empreendedor e vontade de crescer e se tornar sócio de uma empresa startup.
Salário de R$ 4-5 mil + VR + VT + participação nos lucros + ações da empresa a partir do segundo ano.
Envie o seu CV para thiago@precisodisso.com.br
Para trabalhar na região de Moema em São Paulo

[18] Comentário enviado por elgio em 26/12/2011 - 13:54h

Caro Thiago.

Coloque seu anúncio neste forum: http://www.vivaolinux.com.br/comunidade/Classificados-de-empregos-Linux/forum/

Os moderadores do VOL terão maior prazer em colocar ele em destaque na página principal do VOL.

Coloque e me avise, ok?

Elgio

[19] Comentário enviado por removido em 12/01/2012 - 09:56h

Simplesmente maravilhoso Elgio! Parabéns!

[20] Comentário enviado por marcoaw em 12/01/2012 - 14:49h

muito bom !!!

[21] Comentário enviado por marcelo_v em 09/02/2012 - 12:22h

Artigo perfeito, sempre as pessoas entendem melhor com alguns exemplos do cotidiano, para dps citar um exemplo pratico da apresentacao do assunto, e foi realmente isso q vc fez. Esta' de parabe'ns, continue assim!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts