Github 작업으로 저장소를 복사하려는 인증 오류

Oct 08 2020

CI / CD 용 Azure Pipelines를 사용하는 리포지토리가 많이 있는데, 이제 Github Actions로 이식하려고합니다. 이것은 내가 작업하는 첫 번째 것입니다.https://github.com/Azure/AzureAuth/tree/fix-ghaction

99 % 작동하지만 한 단계에서 이상한 인증 오류가 발생합니다. 리포지토리는 다른 조직 (cloudyr)으로 미러링되며이 단계를 사용하여 미러링을 수행합니다.

  - 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/*

이것은 repo 비밀에서 PAT를 검색하고 git push. Azure Pipelines에서 완벽하게 작동했지만 이제 다음 오류와 함께 실패합니다.

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.

누구든지이 문제의 원인과 해결 방법을 설명 할 수 있습니까? Azure / AzureAuth 및 cloudyr / AzureAuth 리포지토리에 대한 관리자 액세스 권한이 있습니다. PAT가 유효한지도 확인했습니다.

실패한 로그는 다음과 같습니다. https://github.com/Azure/AzureAuth/runs/1228152900?check_suite_focus=true

답변

3 bk2204 Oct 08 2020 at 22:37

GitHub Actions는 http.extraheader사용자 지정 권한 부여 헤더에 리포지토리를 복제하기 위해 원래 토큰을 보내는 옵션 중 하나를 사용하여 구성 옵션을 저장합니다 . 다른 리포지토리를 사용할 때 Git에서 추가 한 Authorization 헤더와 충돌하고 발급 된 토큰은 원래 리포지토리에 대해서만 유효하기 때문에 이것은 나쁜 생각입니다.

다른 저장소로 푸시하려면 다음과 같은 작업을 수행하여 해당 구성 옵션을 설정 해제해야합니다.

git config -l | grep 'http\..*\.extraheader' | cut -d= -f1 | \
    xargs -L1 git config --unset-all

또한 사용자 이름 필드에 인증 토큰을 전달하지 않아야합니다. GitHub는이를 필터링하지만 사용자 이름 필드가 로그에 나타날 가능성이 더 높으므로 다음과 같이 더미 이름을 사용하여 암호 필드에 전달하는 것이 좋습니다.

git push --prune https://token:[email protected]/${CLOUDYR_REPO}.git