토큰을 사용하여 GitHub로 인증


118

개인 액세스 토큰을 사용하여 GitHub로 인증하려고합니다. github의 도움말 파일에서 cURL 메서드를 사용하여 인증 ( https://help.github.com/articles/creating-an-access-token-for-command-line-use ) 하도록 명시되어 있습니다 . 시도했지만 여전히 GitHub로 푸시 할 수 없습니다. 인증되지 않은 서버 (Travis-CI)에서 푸시를 시도하고 있습니다.

cd $HOME
git config --global user.email "emailaddress@yahoo.com"
git config --global user.name "username"

curl -u "username:<MYTOKEN>" https://github.com/username/ol3-1.git
git clone --branch=gh-pages https://github.com/username/ol3-1.git gh-pages

cd gh-pages
mkdir buildtest
cd buildtest
touch asdf.asdf

git add -f .
git commit -m "Travis build $TRAVIS_BUILD_NUMBER pushed to gh-pages"
git push -fq origin gh-pages

이 코드는 오류를 발생시킵니다.

remote : scuzzlebuzzle / ol3-1.git에 대한 익명 액세스가 거부되었습니다.

치명적 : ' https://github.com/scuzzlebuzzle/ol3-1.git/ ' "에 대한 인증 실패

답변:


191

당신의 curl명령은 완전히 잘못되었습니다. 다음을 사용해야합니다.

curl -H 'Authorization: token <MYTOKEN>' ...

그 외에도 실제로 개인 경우 저장소를 복제하도록 컴퓨터를 인증하지 않습니다. (그러나 살펴보면 그렇지 않음을 나타냅니다.) 일반적으로 수행하는 작업은 다음과 같습니다.

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages

그러면 저장소를 복제 할 때 생성 된 원격에 자격 증명이 추가됩니다. 그러나 안타깝게도 Travis가 저장소를 복제하는 방법을 제어 할 수 없으므로 이와 같이 리모컨을 편집해야합니다.

# After cloning
cd gh-pages
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git

그러면 자격 증명이 내장 된 원격을 사용하도록 프로젝트가 수정됩니다.

경고 : 토큰은 읽기 / 쓰기 권한이 있으며 암호처럼 취급해야합니다. 원격을 복제하거나 추가 할 때 복제 URL에 토큰을 입력하면Git writes it to your .git/config file in plain text, which is a security risk.


도와 주셔서 정말 감사합니다. 훌륭하게 작동했습니다. 다음은 변경된 파일의 복사본입니다 : github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . 나는 그것을 꽤 가깝게 얻었다. 어떤 이유로 내가 만든 build1 디렉토리로 푸시하지 않았지만 여전히 빌드 디렉토리로 푸시되어 작동했습니다! 감사!
wayofthefuture 2013-09-21

1
당신이 말하는 편집기 버튼이 무엇인지 모르겠지만 원래 리모컨을 제거하는 것이 절대적으로 필요합니다.
Ian Stapleton Cordasco

1
헤. 멋있는. 기꺼이 도와 드리겠습니다.
Ian Stapleton Cordasco 2013 년

4
당신은 당신 같이 대신 설정 URL을 사용할 수 있으며, 리모컨을 RM은 필요가 없습니다git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
버 커스

1
안전하지 않은 접근 방식. 키는 쉽게 오류를 기록합니다. 대신 엄격한 범위의 배포 키를 사용하세요.
Joseph Lust

53

먼저 개인 액세스 토큰 (PAT)을 생성해야합니다. 여기에 설명되어 있습니다 : https://help.github.com/articles/creating-an-access-token-for-command-line-use/

웃기게도이 기사는 그것을 만드는 방법을 알려주지 만 어떻게해야할지 전혀 모른다. 약 한 시간의 트롤링 문서와 Stack Overflow 후에 마침내 답을 찾았습니다.

$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

원격으로 작업하면서 로컬 변경이있는 동안 회사 정책에 따라 2 단계 인증 을 활성화해야 했기 때문에 실제로는 clone필요 하지 않았습니다 push. 리모컨을 삭제하고 다시 만들어야하는 많은 곳에서 읽었지만 실제로 내 일반 push명령은 clone위와 똑같이 작동했으며 리모컨은 변경되지 않았습니다.

$ git push https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>

(@YMHuang은 문서 링크를 통해 저를 올바른 길로 안내했습니다.)


감사합니다. 저도 같은 작업에 직면했습니다
Surya Prakash Patel

완벽합니다.
Samim Aftab Ahmed

이 접근 방식을 여러 번 시도했지만 동일한 문제에 직면했습니다. PTA를 생성 한 다음 푸시 명령 실행 후 사용자 이름과 토큰을 넣어 인증을 시도했습니다. 여전히 자격 증명이 잘못되었음을 알려줍니다. 이 단계에서 무엇을 놓치고 있습니까?
johnny_kb

30

"성 열쇠"를 넘겨주지 않으려면 ...

sigmavirus24의 응답은 Travis에게 상당히 광범위한 권한이있는 토큰을 제공하도록 요구합니다. GitHub는 "내 공개 저장소 모두 작성"또는 "내 개인 저장소 모두 쓰기"와 같은 넓은 범위의 토큰 만 제공하기 때문입니다.

좀 더 많은 작업을 통해 액세스를 강화하려는 경우 Travis 암호화 yaml 필드와 결합 된 GitHub 배포 키를 사용할 수 있습니다.

기술이 어떻게 작동하는지에 대한 스케치 는 다음과 같습니다 .

먼저라는 RSA 배포 키를 생성하고 (를 통해 ssh-keygen) my_keygithub 저장소 설정에서 배포 키로 추가합니다.

그때...

$ password=`openssl rand -hex 32`
$ cat my_key | openssl aes-256-cbc -k "$password" -a  > my_key.enc
$ travis encrypt --add password=$password -r my-github-user/my-repo

그런 다음 $passwordyaml 파일에 추가하여 통합시 파일을 사용 하여 배포 키를 해독합니다.

before_script: 
  - openssl aes-256-cbc -k "$password" -d -a -in my_key.enc -out my_deploy_key
  - echo -e "Host github.com\n  IdentityFile /path/to/my_deploy_key" > ~/.ssh/config
  - echo "github.com ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==" > ~/.ssh/known_hosts

참고 : 마지막 줄에는 github의 RSA 키가 미리 채워져 있으므로 연결시 수동으로 수락 할 필요가 없습니다.


30

OAuth 토큰을 사용한 자동화 / Git 자동화

$ git clone https://github.com/username/repo.git
  Username: your_token
  Password:

git push명령 에서도 작동합니다 .

참조 : https://help.github.com/articles/git-automation-with-oauth-tokens/


4
핵심은 여기에 설명 된대로 토큰에 대해 항상 프롬프트를 표시 할 필요가 없도록 git을 설정하는 것입니다 -help.github.com/articles/caching-your-github-password-in-git 이 질문에 대한 기타 답변 보안 위험으로 간주 될 수있는 .git / config에 일반 텍스트로 토큰을 작성합니다.
jerome 2015 년

훌륭한 참조-txs!
dalcam

사랑스러운 감사합니다 https : // <mytoken> @mygiturl은 내 .git \ config에서 치료를
받았습니다

22

이것은 ssh를 사용하여 나를 위해 일했습니다 .

설정개발자 설정새 토큰 생성 .

git remote set-url origin https://[APPLICATION]:[NEW TOKEN]@github.com/[ORGANISATION]/[REPO].git

2
이것은 다음 형식을 사용하는 개인 액세스 토큰에도 적용됩니다.git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
CommandZ

나는해야했다git remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
pacoverflow

이것은 나쁜 생각이 아닙니까? 토큰이 콘솔 기록에 캐시되지 않습니까?
TheRealChx101

또한 나를 위해 일했습니다 git remote add origin https : // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol

git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1안전하지 않은 git 출력의 로깅을 피하는 것과 같은 것을 사용할 수 있습니다 . 로그에 포함되지 않도록 토큰을 변수에 저장하십시오. 하지만 어딘가에 저장해야합니다. 추가 보안을 위해 암호화하여 저장할 수 있습니다. 이 접근 방식은 예를 들어 Travis CI에서 지원합니다.
KAP

3

보통 나는 이것을 좋아한다

 git push https://$(git_token)@github.com/user_name/repo_name.git

git_token은 azure devops의 변수 구성에서 읽습니다.

여기에서 내 전체 블로그를 읽을 수 있습니다.


1

ORG / REPO 섹션에서 거의 하루 종일 하드 코딩하는 동안이 문제를 해결하기 위해 빌드 스크립트에 '원격을 찾을 수 없음'이라는 두려운 오류가 발생하여 결국 TRAVIS_REPO_SLUG. 하드 코딩 된 속성에 대해 이것을 전환하면 즉시 작동했습니다.

git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}

0

GitHub 토큰 을 적용하는 데 너무 많은 시간을 소비 함으로써 마침내 다음과 같이 작동합니다.

$ cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)

  • 코드는 토큰 (freestyle}을 사용하여 저장소 복제에 대한 Codefresh 지침을 따릅니다.
  • 테스트 수행 : 일치 단어에 sed %d%H%M'-123456-whatever'
  • 리포지토리로 푸시 백 ( 비공개 리포지토리 )
  • DockerHub 웹훅 에 의해 트리거 됨

다음은 완전한 코드입니다.

version: '1.0'
steps:
  get_git_token:
    title: Reading Github token
    image: codefresh/cli
    commands:
      - cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
  main_clone:
    title: Updating the repo
    image: alpine/git:latest
    commands:
      - git clone https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "chetabahana@gmail.com"
      - git remote add origin https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
      - git status && git add . && git commit -m "fresh commit" && git push -u origin master

산출...

On branch master 
Changes not staged for commit: 
  (use "git add ..." to update what will be committed) 
  (use "git checkout -- ..." to discard changes in working directory) 

modified:   cloudbuild.yaml 

no changes added to commit (use "git add" and/or "git commit -a") 
[master dbab20f] fresh commit 
 1 file changed, 1 insertion(+), 1 deletion(-) 
Enumerating objects: 5, done. 
Counting objects:  20% (1/5) ...  Counting objects: 100% (5/5), done. 
Delta compression using up to 4 threads 
Compressing objects:  33% (1/3) ... Writing objects: 100% (3/3), 283 bytes | 283.00 KiB/s, done. 
Total 3 (delta 2), reused 0 (delta 0) 
remote: Resolving deltas:   0% (0/2)  ...   (2/2), completed with 2 local objects. 
To https://github.com/chetabahana/compose.git 
   bbb6d2f..dbab20f  master -> master 
Branch 'master' set up to track remote branch 'master' from 'origin'. 
Reading environment variable exporting file contents. 
Successfully ran freestyle step: Cloning the repo 

0

github.com 포털에 로그인하는 데 사용하는 비밀번호는 VS Code CLI / Shell에서 작동하지 않습니다. 새 토큰을 생성 하여 URL https://github.com/settings/tokens 에서 PAT 토큰을 복사 하고 해당 문자열을 CLI에 암호로 붙여 넣어야 합니다.


0

GitHub Enterprise를 사용 중이고 저장소를 복제하거나 푸시하면 사용자 이름 / 토큰을 묻는 대신 403 오류가 발생하는 경우 다음을 사용할 수 있습니다.

  1. 저장소 삭제
  2. 명령 프롬프트를 열고 저장소를 원하는 폴더로 이동하십시오.
  3. 유형:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.