Auth-Fehler beim Kopieren eines Repos mit Github-Aktionen
Ich habe eine Reihe von Repos, die Azure Pipelines für CI / CD verwenden und die ich jetzt auf Github-Aktionen portieren möchte. Dies ist der erste, an dem ich arbeite:https://github.com/Azure/AzureAuth/tree/fix-ghaction
Ich habe es zu 99% funktionsfähig, aber ich bekomme einen seltsamen Authentifizierungsfehler in einem Schritt. Das Repo wird in eine andere Organisation (Cloudyr) gespiegelt, und ich verwende diesen Schritt, um die Spiegelung durchzuführen:
- name: Copy to Cloudyr
if: runner.os == 'Linux'
env:
token: "${{ secrets.ghPat }}" run: | export CLOUDYR_REPO=$(echo $GITHUB_REPOSITORY | sed "s/Azure/cloudyr/") git push --prune https://$[email protected]/${CLOUDYR_REPO}.git +refs/remotes/origin/*:refs/heads/* +refs/tags/*:refs/tags/*
Dies ruft eine PAT aus den Repo-Geheimnissen ab und führt eine aus git push. Es funktionierte einwandfrei mit Azure Pipelines, aber jetzt schlägt es mit dem folgenden Fehler fehl:
Run export CLOUDYR_REPO=$(echo $GITHUB_REPOSITORY | sed "s/Azure/cloudyr/")
remote: Permission to cloudyr/AzureAuth.git denied to github-actions[bot].
fatal: unable to access 'https://github.com/cloudyr/AzureAuth.git/': The requested URL returned error: 403
Error: Process completed with exit code 128.
Kann jemand erklären, was dies verursacht und wie es behoben werden kann? Ich habe Administratorzugriff auf die Azure / AzureAuth- und Cloudyr / AzureAuth-Repos. Ich habe auch überprüft, ob die PAT gültig ist.
Das fehlgeschlagene Protokoll ist hier: https://github.com/Azure/AzureAuth/runs/1228152900?check_suite_focus=true
Antworten
GitHub Actions speichert eine Konfigurationsoption unter Verwendung einer der http.extraheaderOptionen zum Senden des ursprünglichen Tokens zum Klonen Ihres Repositorys in einem benutzerdefinierten Autorisierungsheader. Dies ist eine schlechte Idee, da sie dann mit dem von Git hinzugefügten Autorisierungsheader in Konflikt steht, wenn Sie ein anderes Repository verwenden, und das ausgegebene Token nur für das ursprüngliche Repository gültig ist.
Wenn Sie in ein anderes Repository wechseln möchten, müssen Sie diese Konfigurationsoption deaktivieren, indem Sie Folgendes tun:
git config -l | grep 'http\..*\.extraheader' | cut -d= -f1 | \
xargs -L1 git config --unset-all
Außerdem sollten Sie vermeiden, das Autorisierungstoken im Feld Benutzername zu übergeben. Während GitHub dies filtert, ist es wahrscheinlicher, dass das Feld Benutzername in Protokollen angezeigt wird. Daher empfiehlt es sich, es im Kennwortfeld mit einem Dummy-Namen zu übergeben, wie folgt:
git push --prune https://token:[email protected]/${CLOUDYR_REPO}.git