Dicas e tutoriais

Dicas para Linux: Como utilizar o SSH com um par de chaves criptográficas

Quem administra um servidor de hospedagem ou um computador à distância, por exemplo, sabe que às vezes é necessário acessar diretamente a linha de comando do Linux para realizar determinadas tarefas. Seja para instalar um programa remotamente, seja para realizar uma atualização ou fazer qualquer outra tarefa que você faria se tivesse acesso ao PC. No entanto, quando a tarefa se torna repetitiva e você precisa conectar-se ao mesmo computador mais de uma vez, fica inconveniente ter que repetir a digitação da senha de root várias vezes, e é para contornar esse inconveniente que existem as chamadas chaves de SSH, que ensinaremos a criar na coluna Dicas para Linux desta semana.

Antes de ensinar a criar as chaves, você, que pode nunca ter mexido com conexões remotas antes, pode estar se perguntando: Mas o que seria SSH? Sem problemas! O Guia do PC explica!

O que é SSH?

SSH, cuja sigla significa Secure SHell (o H está em maiúsculo apenas para compreender o contexto da sigla), é, simultaneamente,  um programa de computador e um protocolo de rede. Como programa, ele vem pré-instalado em inúmeras distribuições do Linux e permite acesso fácil ao terminal de computadores remotos, através do seu protocolo de rede de nome homônimo. Como protocolo de rede, ele permite a comunicação fácil entre computadores focando especialmente em acesso remoto.

Além disso, possui recursos adicionais, como suporte a transferência de arquivos (através do SCP, que roda sob o protocolo SSH) e criação de túneis (algo similar a um proxy, mas disponível em qualquer porta, em qualquer computador com Linux e de maneira mais sexy agradável).

Por ser um protocolo de acesso remoto, é normal saber que o SSH geralmente solicita uma senha para o acesso a um determinado computador. Esta senha geralmente é a senha do usuário com o qual você está tentando conectar em uma máquina, ou seja, se você tentar conectar a uma máquina com o hostname um-servidor-ssh-qualquer. Se você passar o endereço fernando@um-servidor-ssh-qualquer ao executável do SSH, ele claramente irá solicitar a senha para o usuário fernando. Tal comando, e seu retorno, seriam aproximadamente assim:

Captura de tela mostrando exemplo de acesso via SSH a um computador com senha
Screenshot mostrando um exemplo de acesso via SSH a um computador qualquer

Note que, na imagem acima, não houve mudança do hostname da sessão por apenas um motivo: O computador com o nome um-servidor-ssh-qualquer é exatamente o mesmo computador que eu estou usando (veja o IP do computador na screenshot acima, 127.0.0.1). Isso aconteceu apenas por falta de outros computadores remotos para poder acessar. Mas, ainda assim, você já pode entender a lógica do negócio. :)

Além disso, como você pode ver na imagem acima, o SSH questiona se o host é mesmo conhecido, pois no caso o servidor não pode ser autenticado. Esta pergunta geralmente acontece somente no primeiro acesso, e ocorre apenas para confirmar a identidade do computador. Note ainda que na screenshot, o SSH solicita a senha para poder então acessar a máquina. Tal solicitação é, acima de tudo, eficiente, pois assim é possível criptografar de maneira segura toda a comunicação.

Mas, para quem acessa um mesmo computador várias vezes, esta operação de inserir a senha pode ser incômoda, não é mesmo? É para isso que foram criadas as chaves criptografadas! Aprenda abaixo como usá-la:

Como criar e usar chaves criptografadas do SSH

Quando você repete demais uma tarefa, é normal querer evitar uma determinada parte dela para poupar tempo. Graças a isso, o SSH possui suporte a chaves criptográficas. Pense nelas como sendo algo similar a sua identidade: Quando você cria uma chave criptográfica, ela irá identificar unicamente você. Ela é única, e é praticamente impossível replicá-la de forma perfeita através do comando para gerá-la. Entretanto, é perfeitamente possível copiá-la para outro computador e usá-la de forma similar. Mas acredito que você não copiaria sua “identidade” para algo que não é exatamente seu, né? :)

Além disso, você deve notar o uso da palavra ‘chave’ no plural. Ela se deve ao fato de que, ao criar chaves criptografadas, não é gerada apenas um arquivo. É gerado uma chave privada – que deve ser mantida no seu computador para identificação -, e uma chave pública – que pode ser distribuída pelos mais variados serviços e computadores sem se preocupar muito.

Para usar chaves criptografadas com SSH você precisa primeiramente criá-las. Criar um par de chaves privadas é muito simples: basta abrir o terminal (CTRL+ALT+T no Ubuntu) e digitar o seguinte comando:

ssh-keygen

O gerador de chaves privadas irá lhe fazer três perguntas básicas:

  • Onde você deseja armazenar a chave – Nesta pergunta você pode escolher um arquivo para guardar a chave. Neste tutorial, é fortemente recomendado deixar com o valor padrão, apenas pressionando Enter, pois o uso de chaves criptografadas com um nome personalizado não está no escopo deste artigo.
  • Que senha você deseja usar com a chave – Informe uma senha diferente das senhas dos serviços que você deseja usar, ou apenas deixe em branco (apertando Enter), se quiser praticidade e pretender manter a chave apenas no seu computador.
  • A confirmação da senha que você deseja usar com a chave – Informe o mesmo valor da pergunta anterior ou, se não tiver definido nenhuma senha, apenas pressione Enter.

Depois de responder as perguntas, o gerador de chaves criptografas irá mostrar algo como na imagem abaixo:

Screenshot do gerador de chaves criptografadas para Ubuntu funcionando em um terminal
O gerador de chaves criptografadas funcionando. Nerd, não? :)

Depois do término do executável, você já terá uma chave criptografada salvo em seu computador! Agora, basta usá-la.

Usando sua recém-criada chave criptografada

Para usar uma chave criptografada para acessar um computador remotamente, basta acessar o PC remoto e adicionar a sua chave pública (na imagem acima, seria o conteúdo do arquivo /home/fernando/.ssh/id_rsa.pub) à lista de chaves autorizadas do computador que você pretende acessar.

Felizmente, a comunidade do SSH também percebeu a complexidade desta tarefa e criou um executável que faz automaticamente este trabalho. Para executá-lo, simplesmente execute este comando no terminal:

ssh-copy-id (usuário)@(endereço da máquina que você deseja acessar)

Baseado no exemplo de conexão acima, o comando executado seria algo similar a:

ssh-copy-id fernando@um-servidor-ssh-qualquer

A saída deste comando é esta:

Screenshot de um terminal com a saída do executável ssh-copy-id copiando a chave criptografada do seu computador para um computador remoto
Executável automático para copiar as chaves criptografadas do seu computador para um computador remoto.

Note que o utilitário solicita a senha do usuário no computador remoto. Isso acontece pois você, até a colocação da chave criptografada no computador remoto, ainda não é autenticado automaticamente no computador remoto, sendo assim necessária a colocação da senha.

Além disso, note que ele coloca o comando SSH para acessar o computador remoto especificado para poder testar se a chave foi colocada corretamente, e recomenda que o arquivo ~/.ssh/authorized_keys seja verificado como checagem para saber se nenhuma outra chave foi adicionada sem que você espere, etapa que não é necessária, em especial caso se trate do servidor no qual você hospeda o seu site.

Vamos, agora, tentar acessar o servidor remoto através do comando abaixo:

ssh fernando@um-servidor-ssh-qualquer

Durante a primeira execução deste comando, eu juro que quase joguei o PC na parede, foi apontado um erro meio estranho e não muito motivador:

Agent admitted failure to sign using the key.

O que este comando quer dizer? Quer dizer que a sua chave SSH ainda não está sendo usada pelo executável do SSH. Como resolver? Simples, execute o comando abaixo e depois tente executar o comando de conexão novamente:

ssh-add
ssh fernando@um-servidor-ssh-qualquer

Pronto! Você estará conectado ao servidor SSH usando apenas suas chaves criptografadas. Veja como ficou ficou aqui a saída deste comando aqui:

Conexão SSH usando apenas chaves privadas.
E a senha? A senha sumiu! :)

Legal, né? Note que se você tiver informado uma senha durante a criação de sua chave criptografada, ela será solicitada durante a conexão, em vez da senha de conexão do computador remoto. Além do mais, isso desvirtuaria o sentido desta dica, que é facilitar sua vida automatizando certos processos. Portanto, o uso da senha aqui não é muito inteligente.

Em alguns casos, o uso do ssh-copy-id pode dar erro. Nesses casos, pode ser interessante autorizar as chaves SSH do jeito tradicional. Veja como fazê-lo com o passo-a-passo abaixo:

1 – Abra o terminal (CTRL+ALT+T, caso você use Ubuntu) e digite o comando abaixo:

cat ~/.ssh/id_rsa.pub

Copie todo o código mostrado no terminal. No caso do screenshot abaixo:

Conteúdo do arquivo de chave criptografada pública
Todo o conteúdo da chave pública do meu PC

O código desejado seria o seguinte:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBnDUnKJP1ivg3NhO4IOV0orPBpwFFDD0as4ffMfMUfKGvJSzz8wbyZEE0+KiLbS7G4b1bxrfoT/1ef5wXC3ORCX9CvVyAQHZ4g/RouwPAnV0bOmsiD4UYooXbC1vgtThtHWo2IEw28NFHPyP1xvSpDM9CrQG/1tiS9pf5GRAHigYvL805ZAExXs/ytomCPZbyTm1zyuR9XxcbVavnTBjzUgF71biJKb10zBQP4WnBEi0o6rt4ric+OqSgNEc1yrgRyIck88rAKxTv7FuSzOwLi4mt+pNI74RVNm+566WWyCM9XI4Naj27mWDWnbDxds0eeSWINWUgqhXLDbBEueN1 fernando@fernando-desktop

Note que, embora o conteúdo do arquivo seja quebrado automaticamente para caber na tela, todo o conteúdo dele é correspondente a apenas uma linha. Aliás, se você preferir, é possível abrir o mesmo arquivo com o gedit apenas trocando o arquivo cat por gedit. Assim você terá uma interface gráfica mais fácil para usar. :)

2 – Conecte-se via SSH ao computador que deseja acessar e informe a senha esperada.

3 – Rode o comando abaixo:

echo “(conteúdo do arquivo copiado acima)” >> ~/.ssh/authorized_keys

No caso do conteúdo que publiquei acima, o comando ficaria assim:

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDBnDUnKJP1ivg3NhO4IOV0orPBpwFFDD0as4ffMfMUfKGvJSzz8wbyZEE0+KiLbS7G4b1bxrfoT/1ef5wXC3ORCX9CvVyAQHZ4g/RouwPAnV0bOmsiD4UYooXbC1vgtThtHWo2IEw28NFHPyP1xvSpDM9CrQG/1tiS9pf5GRAHigYvL805ZAExXs/ytomCPZbyTm1zyuR9XxcbVavnTBjzUgF71biJKb10zBQP4WnBEi0o6rt4ric+OqSgNEc1yrgRyIck88rAKxTv7FuSzOwLi4mt+pNI74RVNm+566WWyCM9XI4Naj27mWDWnbDxds0eeSWINWUgqhXLDbBEueN1 fernando@fernando-desktop" >> ~/.ssh/authorized_keys

Depois disso, apenas desconecte e tente conectar novamente. Desta vez, ele não deverá solicitar a senha, ou deverá solicitar a senha que você informou durante a criação da chave. Caso dê algum erro, experimente rodar o comando ssh-add e tentar novamente. Com estes comandos todos os seus problemas relacionados com acesso remoto por SSH estarão resolvidos.

E esta foi a coluna Dicas para Linux desta semana. Esperamos que você tenha gostado! Agora gostaríamos de saber de você: O que achou da nossa dica? Teve algum problema em executá-la? Vai usar mais chaves criptografadas no dia-a-dia? Informe nos comentários! E, caso tenha alguma pauta para sugerir, envie-a para admin@guiadopc.com.br e, quem sabe, não publicamos sua dica qualquer quarta-feira dessa, hein!? Caso deseje, pode, ainda, dar uma lida nas dicas que publicamos nas semanas anteriores:

Até quarta-feira que vem!

Tags: Destaques, Dicas para Linux, Linux

Você também vai gostar

Leia também!