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:
-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:
Inserir um local de arquivo para salvar a chave (pressione Enter para usar o local padrão ~/.ssh/id_rsa)
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:
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:
As chaves SSH não existem
As chaves SSH não estão no local padrão
As chaves SSH têm permissões incorretas
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:
-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.
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:
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.
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.
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:
Use uma senha: Ao gerar sua chave SSH, considere usar uma senha para maior segurança.
Chaves diferentes para servidores diferentes: Para maior segurança, considere usar chaves diferentes para servidores ou propósitos diferentes.
Faça backup de suas chaves: Mantenha backups de suas chaves SSH em um local seguro.
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:
Entendendo a autenticação de chave SSH e como o comando ssh-copy-id funciona
Gerando pares de chaves SSH com o comando ssh-keygen
Verificando e corrigindo as permissões das chaves SSH
Usando ssh-copy-id corretamente para copiar sua chave pública para um servidor remoto
Testando e verificando a autenticação de chave SSH
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.