1
resposta

[Dúvida] Erro Permission Denied public key

Rodei o jenkins e tive o seguinte erro:

Load key "****": error in libcrypto root@00.000.000.000: Permission denied (publickey). lost connection

Preciso fazer o deploy pra um servidor remoto de produção (ocultei o endereço real).

  • Configurei a minha chave ssh pública no jenkins como credencial global (a mesma que está autorizada no servidor remoto) (Insira aqui a descrição dessa imagem para ajudar na acessibilidade )

  • Configurei as variaveis de ambiente: environment { NODE_ENV = 'production' NEXTAUTH_URL = 'http://localhost:3000' DEPLOY_DIR = '/root/teste' REMOTE_USER = 'root' REMOTE_HOST = '00.000.000.000' }

  • No jenkinsfile no step de deploy coloquei o seguinte: stage('Deploy') { steps { script { echo 'Deploying...' withCredentials([sshUserPrivateKey(credentialsId: 'ID_DA MINHA CHAVE', keyFileVariable: 'SSH_KEY')]) { sh """ tar czf build.tar.gz .next package.json scp -i $SSH_KEY -o StrictHostKeyChecking=no build.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:${DEPLOY_DIR} ssh -i $SSH_KEY -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${DEPLOY_DIR} && tar xzf build.tar.gz && rm build.tar.gz && npm install --production' """ } } } }

1 resposta

Olá, Nathália!

Esse erro de "Permission Denied (publickey)" geralmente está relacionado a problemas com a chave SSH. Vamos verificar alguns pontos para tentar resolver:

  1. Verifique a Chave SSH:

    • Certifique-se de que a chave privada configurada no Jenkins corresponde à chave pública autorizada no servidor remoto.
    • Verifique se a chave privada está no formato correto e não está corrompida.
  2. Permissões da Chave SSH:

    • As permissões da chave privada devem ser restritas. Verifique se a chave privada tem permissões 600:
      chmod 600 /caminho/para/sua/chave_privada
      
  3. Configuração das Credenciais no Jenkins:

    • Na imagem que você forneceu, parece que a credencial "root" está configurada. Certifique-se de que essa credencial contém a chave privada correta.
    • No seu Jenkinsfile, o credentialsId deve corresponder ao ID da credencial configurada no Jenkins. Verifique se o ID está correto.
  4. Dependências do Jenkins:

    • O erro "error in libcrypto" pode indicar que há um problema com a biblioteca libcrypto no servidor Jenkins. Certifique-se de que todas as dependências necessárias estão instaladas e atualizadas.
  5. Teste Manual:

    • Tente realizar a conexão SSH manualmente a partir do servidor Jenkins para o servidor remoto usando a mesma chave privada para garantir que a conexão funciona fora do Jenkins:
      ssh -i /caminho/para/sua/chave_privada root@00.000.000.000
      
  6. Revise o Jenkinsfile:

    • Certifique-se de que a variável SSH_KEY está sendo corretamente referenciada no seu script. Uma pequena modificação pode ser necessária:
      withCredentials([sshUserPrivateKey(credentialsId: 'ID_DA_SUA_CHAVE', keyFileVariable: 'SSH_KEY')]) {
          sh """
          tar czf build.tar.gz .next package.json
          scp -i \$SSH_KEY -o StrictHostKeyChecking=no build.tar.gz ${REMOTE_USER}@${REMOTE_HOST}:${DEPLOY_DIR}
          ssh -i \$SSH_KEY -o StrictHostKeyChecking=no ${REMOTE_USER}@${REMOTE_HOST} 'cd ${DEPLOY_DIR} && tar xzf build.tar.gz && rm build.tar.gz && npm install --production'
          """
      }
      

Espero ter ajudado e bons estudos!