Resolva problemas de acesso

Esta página oferece sugestões de resolução de problemas de acesso à Solução Bare Metal.

Verifique se a sua pergunta ou problema já foi abordado na página Problemas conhecidos e limitações.

Não é possível estabelecer ligação ao cliente SSH

Se o seu cliente SSH não conseguir estabelecer ligação a um servidor, pode ver um dos seguintes erros:

  • connection timeout ou connection refused: o cliente SSH não consegue estabelecer ligação.

  • Permission denied (publickey): O cliente SSH não consegue autenticar.

Para diagnosticar falhas nas ligações SSH, siga estes passos:

  1. Teste a conetividade.

    Certifique-se de que o anfitrião está acessível e que a porta SSH (22) está aberta através dos comandos ping, traceroute e nc.

    ping SERVER_NAME
    
    traceroute SERVER_NAME
    
    echo "" | nc SERVER_NAME 22
    

    Se isto não funcionar, o problema pode estar na camada de rede e não no SSH.

  2. Examine o resultado da depuração do lado do cliente.

    1. Ative a verbosidade do protocolo SSH.

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

      O comando imprime o resultado da depuração que mostra os eventos principais do protocolo SSH do lado do cliente.

      O exemplo de saída seguinte mostra que o cliente enviou a respetiva chave, mas o servidor rejeitou-a. O servidor pediu à autenticação para continuar com outra chave pública, mas o cliente não tem chaves adicionais para oferecer.

      .. .. ..
      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 o resultado detalhado 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 o resultado de strace para ver se existem erros relacionados com o problema principal.

      Em alguns casos, a saída de depuração do lado do cliente não é suficiente para identificar o problema. Também pode ter de executar o rastreio do lado do servidor para encontrar o erro. Até não conseguir executar o SSH no seu servidor, use a consola série interativa para realizar os passos seguintes.

  3. Examine o resultado da depuração do lado do servidor.

    1. Encontre as definições de SSH atuais.

      grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
      
    2. Para obter informações detalhadas sobre o SSH, defina os seguintes parâmetros no ficheiro /etc/ssh/sshd_config para obter informações detalhadas.

      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 registos:

      grep sshd /var/log/messages
      

      Em alternativa, pode exportar todas as mensagens relevantes para o período através do seguinte comando:

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

      Substitua o seguinte:

      • START_TIME: a hora de início do período no formato yyyy-mm-dd hh:mm:ss.
      • END_TIME: a hora de fim 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 estes problemas, considere os seguintes passos:

  • Verifique se o ficheiro de chave do cliente está definido com autorizações de leitura (indicador 400). Caso contrário, o cliente SSH não o aceita.

    Para definir a flag de só leitura para a 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 ficheiro de configuração local do utilizador correspondente (~/.ssh/authorized_keys).

  • Em alguns casos, o problema pode estar relacionado com a versão do protocolo SSH ou o algoritmo 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 para ssh e sshd_config fornecem os detalhes para manter a configuração necessária. Por exemplo, para encontrar os algoritmos de troca de chaves ou as cifras suportadas, use os seguintes comandos:

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