Skip to main content

리포지토리에 대한 인증 문제 해결

codespace의 리포지토리를 복제, 푸시 또는 끌어올 때 일반적인 인증 문제를 해결하는 방법을 알아봅니다.

리포지토리에 대한 codespace를 만들 때 일반적으로 git pullgit push를 사용하여 추가 인증 없이 해당 리포지토리에 변경사항을 끌어다 놓을 수 있습니다. 그러나 경우에 따라 이러한 작업을 실행하려고 할 때 인증 오류가 표시 될 수 있습니다.

codespace를 만든 리포지토리가 아닌 다른 리포지토리와 상호 작용하려는 경우에도 오류가 발생할 수 있습니다.

codespace를 만든 리포지토리에 인증

codespace를 만든 리포지토리로 푸시하거나 끌어오려고 하지만 인증이 실패하는 경우 git@github.com: Permission denied (publickey) 또는 Host key verification failed와 같은 오류가 표시 될 수 있습니다.

GitHub Codespaces와 함께 dot 파일 리포지토리를 사용하고 데이터를 원격 리포지토리 전송하기 위해 HTTPS 이외의 프로토콜을 사용하도록 Git을 구성한 경우 이러한 오류가 표시될 수 있습니다. 예를 들어 dotfiles의 구성 파일에 다음과 같은 줄을 포함하여 SSH를 사용하도록 Git을 구성했을 수 있습니다.

[url "git@github.com:"]
  insteadOf = https://github.com/

GitHub Codespaces은(는) 기본적으로 HTTPS 프로토콜을 사용하며 , codespace를 만든 리포지토리에 대한 읽기 및 쓰기 권한으로 구성된 GITHUB_TOKEN로 인증합니다. codespace에서 기본 HTTPS 및 GITHUB_TOKEN을 사용하는 것이 좋습니다. GITHUB_TOKEN의 권한은 일반적으로 최소 권한의 보안 원칙에 따라 하나의 리포지토리로 제한됩니다. SSH 인증에는 세분화된 리포지토리 권한이 없으므로 실수로 SSH 키를 노출하면 다른 사용자가 모든 리포지토리에 액세스할 수 있습니다.

기본 HTTPS를 사용하려면 dot 파일에서 충돌하는 구성을 제거합니다. dot 파일 리포지토리에 install.sh과 같은 인식된 파일에 설치 스크립트가 포함된 경우 다음과 같은 논리를 사용하여 codespace에서 구성을 제외할 수 있습니다.

if [ -z "$CODESPACES" ]; then
  git config --global url."git@github.com".insteadOf "https://github.com"
fi

신뢰할 수 있는 리포지토리에서 만든 codespace에서 SSH를 사용해야 하는 경우 GitHub 계정에 연결된 SSH 키로 인증하도록 codespace가 설정되어 있는지 확인합니다. 자세한 내용은 "새 SSH 키 생성 및 ssh-agent에 추가"을(를) 참조하세요.

codespace를 만들지 않은 리포지토리에 인증

codespace의 GITHUB_TOKEN은 codespace를 만든 리포지토리에 대한 읽기 및 쓰기 액세스 권한으로 구성됩니다. 기본적으로 토큰은 다른 리포지토리에 액세스할 수 없습니다. 리포지토리를 복제할 수 없거나 복제한 리포지토리로 푸시할 수 없습니다.

codespace에서 GITHUB_TOKEN 값을 수동으로 업데이트하지 않는 것이 좋습니다. 프로젝트에 다른 리포지토리에 대한 액세스 권한이 필요한 경우 개발 컨테이너 구성에 추가 권한을 나열하여 codespace에 이러한 리포지토리에 대한 액세스 권한을 부여할 수 있습니다. 이렇게 하면 사용자가 codespace를 만들 때 추가 권한을 부여할 수 있습니다. 그러나 기존 codespace의 사용 권한은 변경되지 않습니다. 자세한 내용은 "Codespace 내의 다른 리포지토리에 대한 액세스 관리"을(를) 참조하세요.

기존 codespace의 다른 리포지토리에 액세스해야 하거나 필요한 권한이 사용자 고유이고 다른 기여자 적용되지 않는 경우 리포지토리에 대한 액세스 권한이 있는 personal access token을(를) 만들고 codespace에 토큰을 추가할 수 있습니다. fine-grained personal access token을(를) 사용하고, 액세스가 필요한 리포지토리만 선택하고, 콘텐츠 권한에 필요한 액세스 권한만 부여하여 토큰의 액세스를 제한하는 것이 좋습니다. 자세한 내용은 "개인용 액세스 토큰 관리"을(를) 참조하세요.

그런 다음 토큰을 codespace에서 환경 변수로 추가하거나 GitHub Codespaces에 대한 비밀로 추가할 수 있습니다. 비밀을 만드는 경우 신뢰할 수 있는 특정 리포지토리만 비밀에 액세스하도록 허용해야 합니다. 새 비밀을 추가하면 기존 코드 영역을 다시 로드하여 새 비밀을 가져오라는 메시지가 표시됩니다. 자세한 내용은 "GitHub Codespaces에 대한 계정별 비밀 관리"을(를) 참조하세요.

토큰을 사용하여 codespace에서 인증하려면 다음 옵션이 있습니다.

  • 환경 변수 또는 비밀을 만들 때 GH_TOKEN이라는 이름을 사용할 수 있습니다. GH_TOKEN 변수는 GitHub CLI 작업에서 기본적으로 사용되므로 gh repo clone OWNER/REPO 명령을 사용하여 리포지토리를 복제할 수 있습니다.

    그러나 git push을 사용하여 리포지토리에 푸시 하려고 하면 Git의 자격 증명 도우미 인증에 기존 GITHUB_TOKEN를 사용 하려고 시도하여 인증이 실패합니다. 도우미를 재정의할 수 있지만 codespace를 만든 원래 리포지토리와 상호 작용하려고 할 때 마찰이 발생할 수 있습니다.

  • 액세스 토큰을 포함하는 URL을 사용하여 리포지토리를 복제할 수 있습니다. YOUR-VARIABLE을 만든 환경 변수 또는 비밀의 이름으로 바꿉니다.

    git clone https://USERNAME:$YOUR-VARIABLE@github.com/OWNER/REPO`
    

    이렇게 하면 특정 리포지토리에 대한 액세스 토큰이 저장되므로 기존 자격 증명 도우미를 재정의하지 않고도 리포지토리로 푸시 및 끌어올 수 있습니다.

    참고: 이러한 방식으로 복제하면 토큰이 Git 구성에 표시됩니다. 신뢰할 수 있는 리포지토리에서 만든 codespace에서 작업할 때만 이 메서드를 사용해야 하며, 액세스 토큰의 범위를 최대한 제한해야 합니다.