Resumo
Por mais seguras que sejam suas senhas, sempre existe uma pequena possibilidade de que um atacante descubra alguma delas, observando enquanto você digita no teclado, keylogger ou brute force attack.
O SSH oferece uma resposta para o problema.
Em vez de depender unicamente da senha como forma de autenticação, você pode utilizar um par de chaves de autenticação, onde a chave pública é instalada nos servidores que serão acessados e a chave privada (que nunca sai da sua máquina) é protegida por uma passphrase, sem a qual a chave se torna inútil. Este artigo descreve como um profissional de TI pode acessar uma máquina a partir de seu próprio computador via SSH, mas sem precisar ficar repassando a senha.
Passo-a-passo
GERAR A CHAVE NA MÁQUINA DO DESENVOLVEDOR
Na máquina do desenvolvedor, crie uma chave SSH.
Ele deve ser executado usando seu login de usuário (o mesmo que você usa para acessar os servidores remotos), não como root:
ssh-keygen -t rsa
Exemplo de saída do comando acima.
Caso não queira inserir uma senha, pressione ENTER.
A passphrase pode ser desde uma senha "normal", com 8 ou 12 caracteres, até uma frase complexa, sem limite de tamanho; o importante é que não seja algo fácil de adivinhar. A passphrase é, na verdade, um componente da chave de encriptação; sem ela é impossível usar a chave.
Generating public/private rsa key pair.
Enter file in which to save the key (/home/rodrigo/.ssh/id_rsa):
Created directory '/home/rodrigo/.ssh'.
Enter passphrase (empty for no passphrase): ********
Enter same passphrase again: ********
Your identification has been saved in /home/rodrigo/.ssh/id_rsa.
Your public key has been saved in /home/rodrigo/.ssh/id_rsa.pub.
The key fingerprint is:
ff:28:26:f6:87:67:9f:4c:9a:c8:0a:3b:21:81:88:b4 rodrigo@pc-1234ce
PERMISSÕES
O comando gerará os arquivos ".ssh/id_rsa" e ".ssh/id_rsa.pub".
O ".ssh/id_rsa" é um arquivo secreto, que deve usar obrigatoriamente o modo de acesso "600" (que você define usando o chmod), para evitar que outros usuários da máquina possam lê-lo.
chmod 600 ~/.ssh/id_rsa.pub
SSH-ADD
Adicione a chave ao ssh-agent usando o comando ssh-add
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa
LANÇAR A CHAVE PÚBLICA NO SERVIDOR (MANUALMENTE)
OBS: Substitua o "usuario" pelo seu login de usuário e o "servidor" pelo endereço IP ou o domínio do servidor.
Ainda na máquina do desenvolvedor, e depois de gerar seu par de chaves, copie a chave com o comando abaixo:
cat ~/.ssh/id_rsa.pub
Vamos registrar a chave SSH da máquina do desenvolvedor na máquina do Servidor. Entre no servidor desejado (Ex: suap) via SSH (ainda digitando a senha pra entrar pelo SSH) e crie o arquivo:
touch /home/servidor/.ssh/authorized_keys
Restrinja o acesso ao arquivo usando a permissão 600 (dono do arquivo pode ler e escrever)
chmod 600 /home/servidor/.ssh/authorized_keys
Insira (cole) a chave ssh do computador do desenvolvedor no arquivo /home/servidor/.ssh/authorized_keys:
Por fim, a partir da máquina do desenvolvedor, tente conectar no servidor. Ele deverá entrar sem senha.
ssh [email protected] -p 2205
Caso apareça o erro:“Agent admitted failure to sign using the key”, use o seguinte comando:
SSH_AUTH_SOCK=0 ssh [email protected]
LANÇAR A CHAVE PÚBLICA NO SERVIDOR (FORMA AUTOMATIZADA)
OBS: Substitua o "usuario" pelo seu login de usuário e o "servidor" pelo endereço IP ou o domínio do servidor.
O comando "ssh-copy-id" copia sua chave pública, instalando-a no servidor. Estando na máquina do desenvolvedor, digite:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@servidor
O que o ssh-copy-id faz nada mais é do que copiar o conteúdo do arquivo ".ssh/id_rsa.pub", dentro do seu diretório home, para o arquivo ".ssh/authorized_keys" dentro do diretório home do servidor remoto, uma operação que também pode ser realizada manualmente em caso de problemas.