Resolver problemas de acesso

Nesta página, você encontra dicas para resolver problemas de acesso da Solução Bare Metal.

Verifique se sua dúvida ou problema já foi abordado na página Limitações e problemas conhecidos.

Não foi possível conectar o cliente SSH

Se o cliente SSH não conseguir se conectar a um servidor, talvez você encontre um dos erros a seguir:

  • connection timeout ou connection refused: não é possível conectar o cliente SSH.

  • Permission denied (publickey): falha na autenticação do cliente SSH.

Para diagnosticar falhas nas conexões SSH, siga estas etapas:

  1. Teste a conectividade.

    Verifique se o host está acessível e se a porta SSH (22) está aberta usando os comandos ping, traceroute e nc.

    ping SERVER_NAME
    
    traceroute SERVER_NAME
    
    echo "" | nc SERVER_NAME 22
    

    Se isso não funcionar, talvez o problema esteja na camada de rede e não no SSH.

  2. Examine a saída de depuração do lado do cliente.

    1. Ative o nível de detalhes do protocolo SSH.

      ssh -v SERVER_NAME -i ~/.ssh/id_ecdsa
      

      O comando imprime a saída de depuração que mostra os principais eventos do protocolo SSH do lado do cliente.

      O exemplo de saída a seguir mostra que o cliente enviou a chave, mas o servidor a rejeitou. O servidor solicitou que a autenticação continuasse com outra chave pública, mas o cliente não tem como oferecer outras chaves.

      .. .. ..
      debug1: Server host key: ecdsa-sha2-nistp256 SHA256:V9cRYdqcAJv+RPfN+oofNTVdUxs6VlocP4uMWOxeGKI
      debug1: Host 'bms-server' is known and matches the ECDSA host key.
      debug1: Found key in /root/.ssh/known_hosts:1
      debug1: rekey after 134217728 blocks
      debug1: SSH2_MSG_NEWKEYS sent
      debug1: expecting SSH2_MSG_NEWKEYS
      debug1: SSH2_MSG_NEWKEYS received
      debug1: rekey after 134217728 blocks
      debug1: SSH2_MSG_EXT_INFO received
      debug1: kex_input_ext_info: server-sig-algs=
      debug1: SSH2_MSG_SERVICE_ACCEPT received
      debug1: Authentications that can continue: publickey
      debug1: Next authentication method: publickey
      debug1: Offering ECDSA public key: /root/.ssh/id_ecdsa
      debug1: Authentications that can continue: publickey
      debug1: No more authentication methods to try.
      Permission denied (publickey).
      
    2. Se a saída do nível de detalhes do SSH não indicar claramente a causa da mensagem de erro, execute o comando strace:

      strace ssh SERVER_NAME -i ~/.ssh/id_ecdsa > strace-ssh.txt 2>&1
      
    3. Examine a saída strace em busca de erros relacionados ao problema central.

      Em alguns casos, a saída de depuração do lado do cliente não é suficiente para identificar o problema. Talvez você precise também executar o rastreamento do lado do servidor para encontrar o erro. Até a conexão SSH no servidor ser possível, use o console serial interativo para executar as próximas etapas.

  3. Examine a saída de depuração do lado do servidor.

    1. Encontre as configurações atuais do SSH.

      grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
      
    2. Para ver as informações detalhadas sobre o SSH, defina os parâmetros a seguir no arquivo /etc/ssh/sshd_config.

      SyslogFacility AUTH
      LogLevel DEBUG
      
    3. Para aplicar as alterações, reinicie o serviço.

      service sshd restart
      
    4. No lado do cliente, execute o comando ssh e extraia as mensagens sshd dos registros:

      grep sshd /var/log/messages
      

      Também é possível exportar todas as mensagens relevantes do período usando o seguinte comando:

      journalctl -u sshd -S "START_TIME" -U "END_TIME" --utc
      

      Substitua:

      • START_TIME: o horário de início do período no formato yyyy-mm-dd hh:mm:ss.
      • END_TIME: o horário de término do período no formato yyyy-mm-dd hh:mm:ss.

      Exemplo:

      journalctl -u sshd -S "2023-04-25 18:38:00" -U "2023-04-25 18:40:00" --utc
      

Para corrigir esses problemas, siga estas etapas:

  • Verifique se o arquivo da chave do cliente está definido com permissões somente leitura (flag 400). Caso contrário, o cliente SSH não o aceita.

    Para definir a flag somente leitura na chave privada que está em uso, execute o seguinte comando:

    chmod 400 ~/.ssh/id_ed25519
    
  • No lado do servidor, verifique se a chave pública do cliente está especificada no arquivo de configuração local do usuário correspondente (~/.ssh/authorized_keys).

  • Em alguns casos, o problema pode estar relacionado à versão do protocolo SSH ou ao algoritmo do SSH. As saídas de depuração do lado do servidor e do lado do cliente podem indicar esse problema. Normalmente, as páginas man de ssh e sshd_config mostram os detalhes para manter a configuração necessária. Por exemplo, para encontrar os algoritmos ou as criptografias de troca de chaves compatíveis, use os seguintes comandos:

    # Find key exchange algorithms
    ssh -Q kex
    # Find the symmetric encryption ciphers
    ssh -Q cipher