Usando SSH sem senhas

@ 2009-03-07 by João Paulo Pizani Flor

Eu uso Linux, muito. Uso no computador pessoal e no trabalho. Uma ferramenta muito útil pra Linux é o SSH (Secure Shell). Ele permite que você se logue e execute comandos numa máquina remota. A vantagem é que toda a conexão é criptografada, assim mesmo se alguém estiver “ouvindo” sua conexão você fica seguro. Eu uso bastante o SSH, e uma coisa que sempre me irritou era ter que digitar uma senha a cada conexão. Além disso, uma senha diferente pra cada computador em que eu conectava! Agora isso é coisa do passado :) Em poucos passos eu vou ensinar você a nunca mais precisar digitar senha pra se conectar por SSH, e mesmo assim continuar seguro.

Qual é a mágica?

Não é feitiçaria, é tecnologia… :) O que nós vamos fazer é mudar a maneira como dizemos ao servidor “Eu sou eu mesmo”. Na maioria das vezes usamos uma senha pra fazer essa autenticação. O computador acredita que somente eu sei a minha senha, e se “joaopizani” digitou a senha certa então é porque é ele mesmo que está tentando se conectar… Parece bom, não é mesmo?

Nem tanto… Em cada computador que conectamos temos que digitar uma senha (possivelmente) diferente. Além disso, a senha, que supostamente só você devia saber, tem que ficar guardada no computador remoto também. E a cada vez que você conecta, tem que digitar a maldita senha. Como resolver esses problemas? Usando autenticação por chaves criptográficas.

ERRATA (2014-09-14): No parágrafo anterior eu mencionei que a senha “tem que ficar guardada no computador remoto”. Obviamente, isso não é verdade, pois apenas o hash é armazenado. Mesmo assim senhas são uma péssima maneira de realizar autenticação, por vários outros motivos.

E como funcionam essas chaves?

Para se autenticar no SSH pra sempre de forma automática e sem usar senha você deve criar um par de chaves pra você. Uma dessas chaves é chamada de chave privada, pois só você deve ficar com ela, e ela não deve ficar em nenhum computador remoto. A outra chave do par é a (adivinha…) chave pública. Como o nome já diz, essa chave você deve colocar em todos os computadores em que você quer logar por SSH. Agora, como o servidor sabe que é você mesmo tentando logar :) ? É simples, ele lhe desafia, desse jeito:

Se um texto é cifrado com a chave pública de nome-x, só a chave privada de nome-x pode decifrá-lo. Agora, quais são as vantagens de usar chaves ao invés de senhas? Tem várias, entre elas:

Configuração passo-a-passo:

No seu computador, digite os seguintes comandos:

ssh-keygen -t rsa
ssh-copy-id usuario-remoto@maquina-remota

O primeiro vai pedir uma passphrase. Deixe ela em branco. Ele vai gerar seu par de chaves. O segundo comando copia a sua chave pública para a máquina remota. Ele vai pedir sua senha. Essa é a última vez que você digita senha pra entrar nessa máquina. Nunca mais!

NOTA (2014-09-14): Sim, eu entendo que deixar chaves privadas em texto plano (sem passphrase) é inseguro. Idealmente você deve usar uma passphrase para proteger a chave e uma ferramenta chamada ssh-agent.

Pra cada máquina que você quer logar sem senha, execute o segundo comando. É só isso!