Skip to main content

Trabalhando com proteção contra push a partir da linha de comando

Saiba quais são as suas opções para desbloquear o envio de alterações a partir da linha de comando para GitHub caso secret scanning detecte um segredo nas suas alterações.

Quem pode usar esse recurso?

Usuários com com acesso para gravação

Resolvendo um push bloqueado

Para resolver um push bloqueado, você deve remover o segredo de todos os commits em que ele aparece.

Remover um segredo introduzido pelo commit mais recente em seu branch

  1. Remova o segredo do código.
  2. Para fazer commit das alterações, execute git commit --amend --all. Isso atualiza o commit original que introduziu o segredo em vez de criar um novo commit.
  3. Efetue o push das alterações com git push.

Remover um segredo introduzido pelo commit anterior em seu branch

  1. Examine a mensagem de erro exibida quando você tentou enviar por push sua ramificação, que lista todas as confirmações que contêm o segredo.

    remote:   —— GitHub Personal Access Token ——————————————————————
    remote:    locations:
    remote:      - commit: 8728dbe67
    remote:        path: README.md:4
    remote:      - commit: 03d69e5d3
    remote:        path: README.md:4
    remote:      - commit: 8053f7b27
    remote:        path: README.md:4
    
  2. Em seguida, execute git log para ver um histórico completo de todas as confirmações em sua ramificação, juntamente com seus carimbos de data/hora correspondentes.

    test-repo (test-branch)]$ git log
    commit 8053f7b27 (HEAD -> main)
    Author: Octocat <[email protected]
    Date:   Tue Jan 30 13:03:37 2024 +0100
    
      my fourth commit message
    
    commit 03d69e5d3
    Author: Octocat <[email protected]>
    Date:   Tue Jan 30 13:02:59 2024 +0100
    
      my third commit message
    
    commit 8728dbe67
    Author: Octocat <[email protected]
    Date:   Tue Jan 30 13:01:36 2024 +0100
    
      my second commit message
    
    commit 6057cbe51
    Author: Octocat <[email protected]
    Date:   Tue Jan 30 12:58:24 2024 +0100
    
      my first commit message
    
    
  3. Focusing only on the commits that contain the secret, use the output of git log to identify which commit comes earliest in your Git history.

    • In the example, commit 8728dbe67 was the first commit to contain the secret.
  4. Start an interactive rebase with git rebase -i <COMMIT-ID>~1.

    • For <COMMIT-ID>, use the commit identified in step 3. For example, git rebase -i 8728dbe67~1.
  5. In the editor, choose to edit the commit identified in step 3 by changing pick to edit on the first line of the text.

    edit 8728dbe67 my second commit message
    pick 03d69e5d3 my third commit message
    pick 8053f7b27 my fourth commit message
    
  6. Salve e feche o editor para iniciar o trocar base interativo.

  7. Remova o segredo do código.

  8. Adicione suas alterações à área de preparação usando git add ..

    Observação

    O comando completo é git add .:

    • Há um espaço entre add e ..
    • O ponto que segue o espaço faz parte do comando.
  9. Fazer commit de suas alterações usando git commit --amend.

  10. Execute git rebase --continue para concluir a troca de base.

  11. Efetue o push das alterações com git push.

Ignorando a proteção de push

Observação

Se você não vir a opção de ignorar um bloqueio, remova o segredo do commit ou envie uma solicitação para obter "privilégios para ignorar" para realizar o push do segredo bloqueado. Consulte Solicitação de privilégios de bypass.

  1. Visite a URL que GitHub retorna quando o push foi bloqueado, pois o mesmo usuário que executou o push. Se um usuário diferente tentar visitar essa URL, ele receberá um erro 404.

  2. Escolha a opção que melhor descreve o motivo pelo qual você deve conseguir efetuar push do segredo.

    • Se o segredo for usado apenas em testes e não representar nenhuma ameaça, clique em Ele é usado em testes.

    • Se a cadeia de caracteres detectada não for um segredo, clique em É um falso positivo.

    • Se o segredo for real, mas você pretender corrigi-lo mais tarde, clique em Corrigirei mais tarde.

    Observação

    É necessário especificar um motivo para ignorar a proteção por push se o repositório tiver a varredura secreta habilitada.

    Ao enviar por push para um repositório público que não tem a varredura secreta habilitada, você ainda está protegido contra envio acidental de segredos graças à proteção por push para usuários, que está ativadahabilitada por padrão para sua conta de usuário.

    Com a proteção por push para usuários, o GitHub bloqueará automaticamente os envios para repositórios públicos se esses envios contiverem segredos com suporte, mas você não precisará especificar um motivo para permitir o segredo, e GitHub não gerará um alerta. Para saber mais, confira Proteção por push para usuários.

  3. Clique em Permitir que eu efetue push deste segredo.

  4. Tente efetuar push novamente na linha de comando em até três horas. Se você não efetuar push em até três horas, precisará repetir esse processo.

Solicitando privilégios de bypass

  1. Visite a URL que GitHub retorna quando o push foi bloqueado, pois o mesmo usuário que executou o push. Se um usuário diferente tentar visitar essa URL, ele receberá um erro 404.

  2. Em "Ou solicitar privilégios para ignorar", adicione um comentário. Por exemplo, você pode explicar por que acredita que o segredo é seguro para envio por push ou fornecer o contexto sobre a solicitação para ignorar o bloqueio.

  3. Clique em Enviar solicitação.

  4. Verifique suas notificações por email para obter uma resposta à sua solicitação. Assim que sua solicitação for analisada, você receberá um email notificando a decisão.

    • Se sua solicitação for aprovada, você poderá enviar por push a confirmação (ou confirmações) que contém o segredo para o repositório, bem como quaisquer confirmações futuras que contenham o mesmo segredo.
    • Se sua solicitação for negada, você precisará remover a senha de todas as confirmações antes de realizar o push novamente. Para obter informações sobre como remover um segredo bloqueado, consulte Resolvendo um push bloqueado.

Leitura adicional

  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-in-the-github-ui)
    
  •         [AUTOTITLE](/code-security/secret-scanning/working-with-secret-scanning-and-push-protection/working-with-push-protection-from-the-rest-api)