Uma coisa muito chata pra quem acessa outros computadores via SSH com frequência é ter que digitar o usuário e a senha sempre que a autenticação é realizada.

Uma alternativa para isso é o uso de par de chaves RSA.

 

Um pouco sobre par de chaves

O conceito é bem simples: você gera um par de chaves. Sendo uma pública e outra privada. Tudo que a chave privada encripta somente a chave pública decripta. Tudo que a chave pública encripta somente a chave privada decripta.

A chave pública é feita para ser distribuída. É ela que você colocará no serviço que você irá conectar.

Você deve proteger a chave privada a todo o custo. Quem tiver posse dela poderá decriptar as mensagens criptografadas enviadas pela chave pública.

 

Linha de comando do linux no windows com mSysGit

Existe diversas formas para gerar o par de chaves, mas a minha maneira preferida é utilizando msysgit. Este é um pacote no qual instala um bash com comandos semelhantes ao linux – inclusive um cliente ssh.

Baixe o msysgit em:

http://msysgit.github.com/

Baixe a versão 1.7.11-preview ou superior
Selecione a opção: Run Git and included Unix tools from the Windows Command Prompt
Selecione a opção: Checkout as-is, commit as-is

Depois da instalação você terá disponível o Git Bash. Ele é uma espécie de “linha de comando do Linux”. Mas não se preocupe, pois você pode usar a linha de comando tradicional do windows. Todas as ferramentas também estarão disponíveis na linha de comando tradicional. Em nosso exemplo eu usarei o Git Bash.

 

Gerando um par de chaves

Execute:

$ ssh-keygen -t rsa

Dê <ENTER> em todas as perguntas que o ssh-keygen lhe fizer. Ele irá pedir o local de geração dos arquivos. Se você não informar ele gerará no diretório do usuário abaixo do diretório .ssh/. Ele também lhe pedirá uma frase. NÃO INFORME NADA.

Se tudo estiver certo o ssh-keygen irá gerar dois arquivos: o id_rsa no qual é a chave privade e o id_rsa.pub no qual é a chave pública. Veja:

$ cd ~/.ssh
$ ls -la

NÃO ESQUEÇA DE FAZER BACKUP DESTES ARQUIVOS!

 

Configurando a chave pública no servidor:

Nossa tarefa agora é copiar a chave pública para o home do usuário no servidor. Podemos fazer isso de duas maneiras:

a. Se você tem acesso via SSH ao servidor e sabe a senha do usuário, basta executar o comando abaixo:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub cezinha@192.162.0.1

A instrução acima diz: copie o id_rsa.pub do meu computador windows, acesse via SSH o servidor 192.168.0.1, utilize o usuário “cezinha” e jogue esta cópia para o diretório .ssh localizado no home do usuário “cezinha”.

Você pode fazer todo o processo manualmente.

Envie pra dentro do servidor o arquivo id_rsa.pub. Você pode fazer isso via ftp, rede, pen drive… não importa. Jogue este arquivo dentro do diretório .ssh do usuário. Você pode criá-lo caso não exista:

$ mkdir .ssh
$ chmod 700 .ssh
$ cd ~/.ssh

Jogue o conteúdo do id_rsa.pub pra dentro do arquivo authorized_keys. É dentro deste arquivo que estão todas as chaves autorizadas para o dito usuário. Veja como:

$ cat id_rsa.pub &gt;&gt; authorized_keys

O arquivo id_rsa.pub pode ser deletado do servidor.

$ rm id_rsa.pub

Pronto! O processo de instalação da chave pública do servidor está ok.

 

Testando o serviço

Volte para a sua máquina Windows e abra o Git Bash. Lá tente acesso ao SSH do servidor:

$ ssh cezinha@192.168.0.1

Se tudo estiver certo você terá acesso ao servidor sem que o SSH peça senha.

 

Coisas que podem dar problema

O processo do lado do cliente é muito simples e não tende a dar problema.

Todos os problemas que eu enfrentei estavam no lado do servidor e todos ligados a direitos de acesso. Provavelmente você não precise nada disso se o seu linux for atual. De qualquer forma segue aqui minhas constatações:

O diretório home do usuário deve pertencer ao próprio usuário e pertencer ao grupo users:

$ chown cezinha:users cezinha/

O diretório home precisa ter acesso 755

$ chown 755 cezinha/

O diretório .ssh precisa ter acesso 700

$ chown 700 cezinha/.ssh/

O arquivo authorized_keys deve ter acesso 600

$ chown 600 authorized_keys

O usuário deve pertencer ao grupo “users”

$ gpasswd -a cezinha users

É isso aí! Boa sorte!