Cliente Windows SSH autenticado por chave RSA no servidor Linux
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:
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:
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:
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:
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:
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:
O arquivo id_rsa.pub pode ser deletado do servidor.
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:
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:
O diretório home precisa ter acesso 755
O diretório .ssh precisa ter acesso 700
O arquivo authorized_keys deve ter acesso 600
O usuário deve pertencer ao grupo “users”
É isso aí! Boa sorte!