quarta-feira, 31 de março de 2010

Autenticação via SSH utilizando chave pública

Secure Shell ou SSH é, simultaneamente, um programa de computador e um protocolo de rede que permite a conexão com outro computador na rede, de forma a executar comandos de uma unidade remota. Possui as mesmas funcionalidades do TELNET, com a vantagem da conexão entre o cliente e o servidor ser criptografada.

A autenticação do mesmo pode ser feita utilizando o par usuário e senha ou mesmo um par de chaves (pública e privada), onde, dependendo das chaves, não será necessário a interação humana para acesso ao servidor, como veremos abaixo:

No cliente é necessário gerar o par de chaves que será usado na autenticação do usuário em questão, no exemplo estou utilizando o usuário aluno:

CLIENTE - /home/aluno~:$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/aluno/.ssh/id_rsa): ENTER
Enter passphrase (empty for no passphrase): ENTER
Enter same passphrase again: ENTER
Your identification has been saved in /home/aluno/.ssh/id_rsa.
Your public key has been saved in /home/aluno/.ssh/id_rsa.pub.
The key fingerprint is:
45:a9:26:7a:76:81:d4:b5:4f:83:13:47:51:90:9a:90 aluno@cliente
The key's randomart image is:
+--[ RSA 2048]----+
| . o+o==. |
| . E..=. |
| . . o=oo |
| o +.o+ . |
| . oS. . |
| . o . |
| o . |
| |
| |
+-----------------+


Isso irá criar um par de chaves do tipo rsa, id_rsa (chave privada) e id_rsa.pub (chave pública) no diretório /home/aluno/.ssh

Agora vamos copiar o arquivo com a chave pública para o servidor no diretório home do usuário a ser utilizado para autenticação, no nosso caso aluno também:

CLIENTE - /home/aluno~:$ scp .ssh/id_rsa.pub aluno@ip do servidor:


No servidor agora, no diretório home do usuário aluno, vamos importar a chave pública do usuário aluno do cliente:

SERVIDOR - /home/aluno~:$ cat id_rsa.pub > .ssh/authorized_keys


Pronto, a chave pública do usuário aluno do cliente já está importada no usuário aluno do servidor, para testar o acesso basta acessar via ssh a partir do cliente para o servidor com o usuário aluno:

CLIENTE - /home/aluno~:$ ssh aluno@ip do servidor


O acesso será feito sem uso de senhas, apenas com a negociação das chaves.