Posts Profissionais

Criando chaves de auntenticação no linux

As buscas mais comuns para está informação são:

– Configurar ssh para não pedir senha
– Acessando o SSH sem senha
– SCP no crontab sem senha
– RSYNC com login automático
– Segurança com chave de autenticação

Chaves de autenticação

As chaves de autenticação são usadas principalmente em duas situações. Para maior segurança nas autenticações, obrigando que o cliente tenha as chaves de autenticação ao invés do login e senha. Ou para processos automatizados onde a maquina cliente não terá como autenticar digitando login e senha e portanto precisa de acesso direto ao servidor.

Como a coisa toda funciona?

De maneira bem simples, na estação serão geradas duas chaves únicas (dois arquivos), um destes arquivos é a chave pública que será enviada aos servidores aos quais se deseja acesso. Quando o cliente tenta se conectar a este servidor será verificada a chave (que deve ser igual no cliente e no servidor) comprovando que o computador que está se conectando é realmente o cliente autorizado.
“O GPG é um sistema de encriptação composto de duas chaves, uma chave pública, que é distribuída abertamente e uma chave privada, que é secreta. A cache privada pode ser utilizada para encriptar arquivos, que podem ser desencriptados apenas usando a chave pública. Isto é feito através de um truque matemático: a chave privada é uma espécie de equação extremamente complexa, que embaralha o conteúdo dos arquivos. A chave pública é um antídoto para ela, que permite reverter os dados a seu estado original. Porém, é impossível descobrir o conteúdo da chave privada usando a chave pública e é também impossível fazê-lo via força bruta.”

Chega de teoria, vamos para a prática

A primeira coisa a fazer é verificar se a maquina cliente já tem suas chaves de autenticação (id_rsa e id_rsa.pub), que ficam em ~/.ssh/ (ou /home/usuário/.ssh). Caso não existam o comando para criá-las é:
# criar os arquivos id_rsa e id_rsa.pub
ssh-keygen -t rsa
Agora precisamos enviar a chave publica (id_rsa.pub) para o servidor, mas precisamente para o arquivo ~/.ssh/authorized_keys (/home/usuário/.ssh/authorized_keys). Isto pode ser feito de várias maneiras:
1) Enviando via ssh-copy-id
# copiar a chave publica automaticamente para o servidor – Executando no cliente
ssh-copy-id -i ~/.ssh/id_rsa.pub seu_login@seu_servidor
2) Enviando via scp
#copiar o arquivo id_rsa.pub para o servidor – Executando no client
scp ~/.ssh/id_rsa.pub seu_login@seu_servidor:~
# incluir o conteúdo do arquivo id_rsa.pub ao conteúdo do arquivo ~/.ssh/authorized_keys – Executando no servidor
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
3) Enviando via cat e ssh
# incluindo conteúdo remoto com cat e ssh
cat ~/.ssh/id_dsa.pub | ssh seu_login@seu_servidor "cat - >> ~/.ssh/authorized_keys2"
(Para quem utiliza o serviço de cloud EC2 da amazon, está opção é muito útil, podendo incluir o parametro –i no ssh informando o arquivo de keypairs)
4) Copiando e colando
Neste caso simplismente copie o conteúdo do arquivo ~/id_rsa.pub no client e cole em ~/.ssh/authorized_keys no seu Server. Dá maneira que achar melhor.

Pronto! Agora é só conectar!

ssh seu_servidor
Caso a conexão falhe algum dos passos anteriores não foi concluído com sucesso. Envie como comentário o erro que lhe ajudo.

Tiago Gouvêa

Full-stack Developer, fazendo códigos desde o século passado. Criador da metodologia "Aprender programação em 20 horas" e diretor da startup App Masters, voltada para o desenvolvimento de aplicativos. Apaixonado por tecnologia e viciado em café.

Respostas (3)

Escreva uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

  1. André Demori

    Pode me ajudar? Como seria colocar a chave como parâmetro?

    # ssh -f -w 0:0 -o Tunnel=ethernet root@192.168.222.33 ifconfig tap0 10.5.5.1 netmask 255.255.255.0

  2. André Demori

    Olá estou querendo fazer uma VPN utilizando SSH, porém ele continua pedindo senha. Se eu acessar apenas o ssh como por exemplo: #ssh seu_servidor, ele acessa normalmente sem pedir senha. Porém quando eu digito: # ssh -f -w 0:0 -o Tunnel=ethernet root@192.168.222.33 ifconfig tap0 10.5.5.1 netmask 255.255.255.0 ele pede senha. E mesmo digitando a senha certa, ele não entra. Sabe o que fazer? Desde já, grato.

    1. Tiago Gouvêa

      Arrisco dizer que a chave para o VPN desta maneira precisa ter a chave salva em outro local, ou, que você informe a chave como parâmetro nesta linha de comando. Pode testar?