トークンを使用して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

このコードはエラーを引き起こします:

リモート: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

1
話しているエディタボタンはわかりませんが、元のリモートを削除する必要があります。
Ian Stapleton Cordasco 2013

1
へえ。涼しい。お役に立ててうれしいです。
Ian Stapleton Cordasco 2013

4
リモートにrmする必要はありません。代わりに、set-urlを使用できますgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus

1
安全でないアプローチ。キーはエラー時に簡単にログに記録できます。代わりに、厳密にスコープされたデプロイキーを使用してください。
ジョセフ・ラスト

53

まず、個人用アクセストークン(PAT)を作成する必要があります。これについては、https//help.github.com/articles/creating-an-access-token-for-command-line-use/で説明しています

おそらく、この記事はそれを作成する方法を説明していますが、それをどうするかについてはまったく手掛かりを与えていません。約1時間のドローリングドキュメントと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フィールドと組み合わせて使用​​できます。

テクニックがどのように機能するかのスケッチはここにあります...

最初にssh-keygen呼び出されるRSAデプロイキーを(を介して)生成し、my_keyそれをgithubリポジトリ設定でデプロイキーとして追加します。

その後...

$ 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

次に、$passwordファイルを使用して、yamlファイルに追加することにより、統合時にデプロイキーを復号化します。

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に書き込むことになりますが、これはセキュリティリスクと見なされます。
ジェローム2015年

素晴らしいリファレンス-txs!
dalcam 16

素敵な感謝https:// <mytoken> @mygiturlは私の.git \ configで御馳走を働いた
Tyeth

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
でした

これは悪い考えではありませんか?トークンはコンソールの履歴にキャッシュされませんか?
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の変数configから読み取っています。

ここで私の完全なブログを読むことができます


1

ORG / REPOセクションのほぼ1日のハードコーディングでこの問題に取り組み、ビルドスクリプトに恐ろしい「リモートが見つかりません」というエラーが表示されると、最終的にを使用するための実用的な解決策が見つかりました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)

  • コードはCodefreshに従います、トークンを使用したリポジトリのクローン作成に関するガイダンスにます(freestyle}
  • テスト実行:一致ワードでsed %d%H%M'-123456-whatever'
  • リポジトリにプッシュバックします(これはプライベートリポジトリです))。
  • DockerHub webhooksによってトリガーされます

以下は完全なコードです。

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.