Usando o ssh-agent para chaves privadas com senha

Em diversos sites, quando alguem procura um meio de acessar maquinas remotas através do ssh sem ter que digitar a senha, voce encontra tutoriais dizendo para criar chaves privadas sem senha, o problema todo é que isso acaba com todo o sentido da utilizacao do ssh, que é ter segurança.

Recentemente apareceu uma vulnerabilidade do openssl em maquinas debian e derivados que permitia a identificação da chave através de brute-force, por conta dessa falha, o openssl só conseguia gerar pequenas possibilidades de chaves, neste caso a utilizacao de um ssh se utilizando apenas de chaves privadas sem senha era fatalmente alvo dessa vulnerabilidade.

Com a utilizacao do ssh-agent você também poderá acessar suas maquinas remotas sem a utilizacao de uma senha, aliás voce estará utilizando uma senha, mas para seu par de chaves, o que o ssh-agent faz é guardar e manipular suas chaves privadas, respondendo ao servidor quando necessário, sem ter que digitar a senha novamente toda vez que voce se conectar ao servidor.

Configurando o ssh-agent

Inicie o ssh-agent em sua maquina local:

[deadcow@mosdef ~]$ ssh-agent

O comando deverá retorna algo parecido com isto:

SSH_AUTH_SOCK=/tmp/ssh-kZcqHb8334/agent.8334; export SSH_AUTH_SOCK;
SSH_AGENT_PID=8335; export SSH_AGENT_PID;
echo Agent pid 8335;

Agora você precisará criar uma chave, para isto faça:

[deadcow@mosdef ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/deadcow/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):     # entre com sua senha aqui.
Enter same passphrase again:                            # repita a senha exatamente como a anterior
Your identification has been saved in /home/deadcow/.ssh/id_rsa.
Your public key has been saved in /home/deadcow/.ssh/id_rsa.pub.
The key fingerprint is: bf:08:b6:a6:18:86:86:de:0d:3b:bf:6f:94:3e:be:80 deadcow@mosdef
[deadcow@mosdef ~]$ 

A grande diferença de um acesso com chaves privadas sem senhas e com senha é que neste estágio quando lhe for perguntado por uma senha, voce deverá digitar uma, de preferencia uma senha forte, que não seja tão simples.

Agora com a chave privada com senha criada em sua maquina local, é necessário também coloca-la na maquina remota que receberá a conexão, pode ser por ftp, scp, ou outro meio que seja mais comodo a você, uma dica é se utilizar dos pipes:

[deadcow@mosdef ~]$ cat ~/.ssh/id_rsa.pub | ssh usuario@servidor-remoto.org'cat >>.ssh/authorized_keys'
Password: 
[deadcow@mosdef ~]$  

Nota: se o servidor remoto estiver rodando uma versão antiga do ssh, é necessário utilizar o nome do arquivo ~/.ssh/authorized_keys2.

Após este processo, teste a sua chave criada fazendo:

[deadcow@mosdef ~]$ ssh usuario@servidor-remoto.org
Enter passphrase for key '/home/deadcow/.ssh/id_rsa':      # digite a senha da chave privada
Last login: Mon Jul 21 10:12:59 2008 from servidor-local.org
..


Adicionando chaves privadas ao ssh-agent

Agora que você já tem a chave criada com senha e o servidor remoto também, é necessário adicionar essa chave ao ssh-agent digitando o seguinte comando:

[deadcow@mosdef ~]$ ssh-add ~/.ssh/id_rsa
Enter passphrase for /home/deadcow/.ssh/id_rsa: 
Identity added: /home/deadcow/.ssh/id_rsa (/home/deadcow/.ssh/id_rsa)
[deadcow@mosdef ~]$ 

Nota: toda vez que o computador for reiniciado será necessário adicionar novamente a chave privada para que seja iniciada a sessão do ssh-agent.

Pronto, se você seguiu corretamente as instruçoes, você já poderá conectar-se ao servidor-remoto sem senha:

[deadcow@mosdef ~]$ ssh usuario@servidor-remoto.org
Last login: Mon Jul 21 10:14:09 2008 from servidor-local.org
..

Caso você não tenha sucesso, verifique as configurações do servidor remoto e local, sua configuração deverá seguir as regras de autenticaçao do servidor, em caso de duvidas utilize a flag '-v' na sintaxe de sua conexão.

Referências:
    http://www.webmonkey.com/tutorial/Automate_a_Remote_Login_Using_SSH-Agent
    http://www.unixwiz.net/techtips/ssh-agent-forwarding.html
    http://mah.everybody.org/docs/ssh

 

0 comentários:

Postar um comentário