Como Resolver o Erro 'No Identities Found' do SSH Copy-ID

LinuxBeginner
Pratique Agora

Introdução

O comando ssh-copy-id é uma ferramenta útil para configurar facilmente a autenticação baseada em chave SSH entre servidores. No entanto, você pode ocasionalmente encontrar o erro "/usr/bin/ssh-copy-id: error: no identities found" ao tentar usar este comando. Este tutorial irá guiá-lo pelos passos para solucionar e resolver este problema, garantindo um processo de autenticação baseado em chave SSH tranquilo. Ao final deste laboratório, você entenderá como a autenticação por chave SSH funciona e será capaz de configurá-la corretamente em seus sistemas.

Entendendo a Autenticação por Chave SSH

Antes de mergulharmos na solução de problemas do erro "no identities found", é importante entender o que é a autenticação por chave SSH e como ela funciona.

O que é Autenticação por Chave SSH?

A autenticação por chave SSH (Secure Shell) é um método de fazer login em sistemas remotos de forma segura sem ter que digitar uma senha toda vez. Ele usa um par de chaves criptográficas:

  • Uma chave privada que permanece em sua máquina local
  • Uma chave pública que é copiada para o servidor remoto

Quando você tenta se conectar a um servidor remoto, seu cliente SSH usa sua chave privada para criar uma assinatura. O servidor verifica essa assinatura usando sua chave pública armazenada em seu arquivo authorized_keys. Se a assinatura for válida, você ganha acesso sem precisar inserir uma senha.

O que é ssh-copy-id?

O comando ssh-copy-id é um utilitário que simplifica o processo de copiar sua chave pública para um servidor remoto. Ele adiciona sua chave pública ao arquivo ~/.ssh/authorized_keys do servidor remoto, permitindo a autenticação sem senha em futuras conexões.

Vamos verificar se você já possui alguma chave SSH em seu sistema. Execute o seguinte comando em seu terminal:

ls -la ~/.ssh

Se você não vir nenhum arquivo ou o diretório .ssh não existir, não se preocupe - criaremos tudo no próximo passo.

Gerando Chaves SSH

Se você não tiver chaves SSH ou quiser criar novas, pode gerá-las usando o comando ssh-keygen. Este é frequentemente o primeiro passo para resolver o erro "no identities found".

Criando um Novo Par de Chaves SSH

Vamos gerar um novo par de chaves SSH executando o seguinte comando:

ssh-keygen -t rsa -b 4096 -C "seu_email@exemplo.com"

Este comando:

  • -t rsa especifica o tipo de chave a ser criada (RSA)
  • -b 4096 especifica o comprimento em bits (criptografia mais forte)
  • -C adiciona um comentário (geralmente um e-mail) para ajudar a identificar a chave

Quando você executa este comando, você será solicitado a:

  1. Inserir um local de arquivo para salvar a chave (pressione Enter para usar o local padrão ~/.ssh/id_rsa)
  2. Inserir uma senha (você pode pressionar Enter duas vezes para não ter senha, mas usar uma adiciona uma camada extra de segurança)

A saída deve ser semelhante a:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/labex/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/labex/.ssh/id_rsa
Your public key has been saved in /home/labex/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD seu_email@exemplo.com
The key's randomart image is:
+---[RSA 4096]----+
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
|                 |
+----[SHA256]-----+

Verificando a Criação da Chave SSH

Agora vamos verificar se as chaves foram criadas corretamente:

ls -la ~/.ssh

Você agora deve ver os arquivos da chave privada (id_rsa) e da chave pública (id_rsa.pub) na saída:

total 20
drwx------ 2 labex labex 4096 Sep 15 10:10 .
drwxr-xr-x 5 labex labex 4096 Sep 15 09:55 ..
-rw------- 1 labex labex 3389 Sep 15 10:10 id_rsa
-rw-r--r-- 1 labex labex  746 Sep 15 10:10 id_rsa.pub
-rw-r--r-- 1 labex labex  444 Sep 15 10:00 known_hosts

Vamos também olhar o conteúdo do seu arquivo de chave pública:

cat ~/.ssh/id_rsa.pub

A saída deve ser uma única linha começando com ssh-rsa seguida por uma longa sequência de caracteres e terminando com seu endereço de e-mail ou comentário.

Agora que confirmamos que nossas chaves SSH existem, podemos passar para a próxima etapa: solucionar e resolver o erro "no identities found".

Entendendo e Resolvendo o Erro 'No Identities Found'

Agora que temos nossas chaves SSH em vigor, vamos entender por que o erro "no identities found" ocorre e como corrigi-lo.

Causas Comuns do Erro

O erro "no identities found" normalmente ocorre por um destes motivos:

  1. As chaves SSH não existem
  2. As chaves SSH não estão no local padrão
  3. As chaves SSH têm permissões incorretas
  4. O comando ssh-copy-id não consegue encontrar nenhuma chave pública para usar

Como já confirmamos que nossas chaves SSH existem no local padrão, vamos verificar as permissões.

Verificando e Corrigindo as Permissões das Chaves SSH

O SSH é muito específico sobre as permissões de arquivo por razões de segurança. Execute o seguinte comando para verificar as permissões do seu diretório .ssh e seu conteúdo:

ls -la ~/.ssh

Para segurança adequada:

  • O diretório .ssh deve ter permissões 700 (rwx------)
  • A chave privada (id_rsa) deve ter permissões 600 (rw-------)
  • A chave pública (id_rsa.pub) deve ter permissões 644 (rw-r--r--)

Se suas permissões estiverem incorretas, você pode corrigi-las com os seguintes comandos:

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

Usando ssh-copy-id Corretamente

Agora vamos tentar usar o comando ssh-copy-id corretamente. A sintaxe correta é:

ssh-copy-id -i ~/.ssh/id_rsa.pub username@remote_host

Onde:

  • -i especifica o arquivo de identidade (chave pública) a ser usado
  • username é seu nome de usuário no servidor remoto
  • remote_host é o nome do host ou endereço IP do servidor remoto

Para nosso ambiente de laboratório, simularemos isso usando a máquina local. Execute:

ssh-copy-id -i ~/.ssh/id_rsa.pub labex@localhost

Você será solicitado a inserir a senha do usuário remoto.

Abra uma janela de terminal no ambiente de desktop, somente o terminal do ambiente de desktop terá as variáveis de ambiente definidas.

Retrieve Password

Para recuperar a senha, execute o seguinte comando.

printenv | grep PASSWORD

Nota: Você deve executar este comando no terminal do ambiente de desktop, não no terminal que você abriu na barra de menu superior.

Este comando exibirá todas as variáveis de ambiente contendo "PASSWORD". Procure uma linha que diga LABEX_PASSWORD=.... Os caracteres após o sinal de igual são sua senha.

Você inserirá essa senha e a chave pública será copiada para o servidor remoto.

Se você vir uma mensagem como "Number of key(s) added: 1", então sua chave foi copiada com sucesso.

Verificando a Autenticação de Chave SSH

Agora que resolvemos o erro "no identities found" e copiamos com sucesso nossa chave SSH para o servidor remoto, vamos verificar se a autenticação de chave SSH funciona corretamente.

Testando a Autenticação de Chave SSH

Em um ambiente real, você testaria a autenticação de chave SSH conectando-se ao servidor remoto:

ssh username@remote_host

Se sua chave SSH estiver configurada corretamente, você deverá conseguir fazer login sem inserir uma senha (a menos que você tenha definido uma senha para sua chave, caso em que precisaria inseri-la).

Para nosso ambiente de laboratório, podemos testar tentando SSH para localhost:

ssh labex@localhost

Se você receber um prompt pedindo para confirmar a conexão (porque localhost não está em seu arquivo de hosts conhecidos), digite yes.

Você pode ver uma mensagem como:

The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is SHA256:abcdefghijklmnopqrstuvwxyz1234567890ABCD.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

Se você for solicitado a inserir uma senha, isso significa que a autenticação de chave SSH ainda não está funcionando. Mas se você fizer login com sucesso sem inserir uma senha, sua autenticação de chave SSH estará funcionando corretamente.

Problemas Comuns de Autenticação de Chave SSH e Soluções

Se você ainda estiver com problemas com a autenticação de chave SSH, aqui estão alguns problemas comuns e soluções:

  1. Configuração do Servidor SSH: O servidor SSH deve ser configurado para permitir a autenticação de chave pública. Isso geralmente é habilitado por padrão, mas você pode verificar examinando o arquivo /etc/ssh/sshd_config no servidor remoto:

    grep PubkeyAuthentication /etc/ssh/sshd_config

    Ele deve mostrar PubkeyAuthentication yes.

  2. Propriedade do Arquivo: Seu diretório home e o diretório .ssh devem ser de sua propriedade:

    ls -ld ~ ~/.ssh

    Ambos devem mostrar seu nome de usuário como o proprietário.

  3. Depurar Conexão SSH: Você pode usar a flag verbose para depurar conexões SSH:

    ssh -v labex@localhost

    Isso mostrará informações detalhadas sobre o processo de autenticação, o que pode ajudar a identificar o problema.

Melhores Práticas de Gerenciamento de Chaves SSH

Aqui estão algumas melhores práticas para gerenciar chaves SSH:

  1. Use uma senha: Ao gerar sua chave SSH, considere usar uma senha para maior segurança.
  2. Chaves diferentes para servidores diferentes: Para maior segurança, considere usar chaves diferentes para servidores ou propósitos diferentes.
  3. Faça backup de suas chaves: Mantenha backups de suas chaves SSH em um local seguro.
  4. Gire as chaves regularmente: Para ambientes sensíveis, considere girar suas chaves SSH periodicamente.

Seguindo estas etapas e as melhores práticas, você pode garantir que a autenticação de chave SSH funcione de forma confiável e segura.

Resumo

Neste laboratório, você aprendeu a solucionar problemas e resolver o erro "no identities found" ao usar o comando ssh-copy-id. Cobrimos:

  1. Entendendo a autenticação de chave SSH e como o comando ssh-copy-id funciona
  2. Gerando pares de chaves SSH com o comando ssh-keygen
  3. Verificando e corrigindo as permissões das chaves SSH
  4. Usando ssh-copy-id corretamente para copiar sua chave pública para um servidor remoto
  5. Testando e verificando a autenticação de chave SSH
  6. Problemas comuns e melhores práticas para o gerenciamento de chaves SSH

Com essas habilidades, você agora pode configurar conexões SSH seguras e sem senha entre sistemas, o que é essencial para a administração e automação eficientes do sistema. A autenticação de chave SSH não apenas oferece melhor segurança do que a autenticação por senha, mas também simplifica o processo de login para usuários legítimos.

Lembre-se de que proteger adequadamente suas chaves SSH é crucial, pois elas fornecem acesso direto aos seus sistemas. Mantenha sempre suas chaves privadas seguras e considere o uso de senhas para proteção adicional.