segunda-feira, 19 de outubro de 2015

Acesso ao Servidor via SSH sem senha, utilizando de Chaves Pública/Privada RSA

Cenário:

Host Servidor:
Sistema Operacional Ubuntu Server 14.04
Openssh-server instalado (Para instalar #apt-get install ssh)

Host Cliente
Sistema Operacional Ubuntu Desktop 15.04

O que será feito aqui é o seguinte:
  1. A ideia é acessar um servidor a partir do seu computador sem digitar senha.
  2. Você vai gerar um par de chaves, pública e privada no seu computador.
  3. Vai enviar a chave pública pro servidor.
    3.1 Nesse envio utilizei o usuário/senha root do servidor de destino.
          Pra funcionar é necessário modificar no servidor o arquivo /etc/ssh/sshd_config 
          para permitir acesso com usuário root.
          Quando for enviado, desfaça a alteração.

1. Gere as Chaves Pública e Privada no Host Cliente

As chaves serão gravadas numa pasta oculta chamada .ssh dentro da pasta pessoal do usuário que estiver logado. O local poderá ser alterado durante a execução do comando, caso não queira alterar, pressione ENTER.

 #ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/usuário/.ssh/id_rsa): NOVO_LOCAL ou ENTER 
Enter passphrase (empty for no passphrase): SENHA PARA A CHAVE PRIVADA 
Enter same passphrase again: SENHA PARA A CHAVE PRIVADA 
Your identification has been saved in /home/usuário/.ssh/id_rsa.
Your public key has been saved in /home/usuário/.ssh/id_rsa.pub.


Nota1: O padrão de chave é 2048 bits. Você pode aumentar para 4096 bits com -b 4096 para torna mais difícil a quebrar da chave por métodos de força bruta.

ssh-keygen -t rsa -b 4096

2. Envie a Chave Pública do Host Cliente para o Host Servidor


Normalmente o acesso root não é permitido em servidores, por questões de segurança, caso queira acessar, utilizando o usuário ROOT do Servidor, terá que editar o arquivo /etc/ssh/sshd_config e alterar a linha "PermitRootLogin without-password"  para "PermitRootLogin yes". Permitindo assim, o envio da chave pública com o usuário root.

Reinicie o serviço SSH:
#service ssh restart

Depois do envio desfaça a alteração e reinicie o serviço SSH.

Envie a chave com o comando:
#ssh-copy-id usuário_no_servidor@IP_Destino

Quando for acessar será solicitado a "passphrase", marque na caixa de diálogo para salvar. Isso fará com que não seja solicitada nos próximos acessos enquanto a seção não seja encerrada, ou seja, feito o logoff.

Caso não apareça essa caixa de diálogo, use os comandos:
#ssh-add
#ssh-agent

O ssh-agent é um agente de autenticação, ele gerencia as conexões ssh de sua sessão login. Fazendo par com o ssh-add, conseguimos manter as conexões ssh no ssh-agent. A grande vantagem nisso tudo é digitar sua senha "passphase" apenas na primeira vez, e deixar o ssh-agent gerenciar as outras conexões.


Referências:
https://ivanix.wordpress.com/tag/ssh-agent/
https://help.ubuntu.com/community/SSH/OpenSSH/Keys
https://www.vivaolinux.com.br/artigo/Utilizando-SSH-com-metodo-de-autenticacao-publickey-+-sshagend-+-sshadd

Comandos úteis:

Se quiser evitar digitar "yes" no primeiro acesso ao servidor pra aceita a chave dele.
#ssh -oStrictHostKeyChecking=no usuário@IP_destino

Se quiser evitar digitar a senha após o comando, instale o pacote "sshpass".
#sshpass -p 'SENHA' ssh usuário@IP_destino

Busca local da chave do destino que foi aceita.
#ssh-keyscan -H IP_Destino

Remove localmente a chave do destino que foi aceita.
#ssh-keygen -R IP_Destino