使用令牌在GitHub上进行身份验证

572

我正在尝试使用个人访问令牌来认证GitHub。在GitHub的帮助文件中,它指出要使用cURL方法进行身份验证 (创建个人访问令牌)。我已经尝试过这样做了,但仍无法将其推送到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/'


3
截至2021年8月28日,GitHub CLI可以用于身份验证(无需生成PAT,如果可以打开浏览器,可以直接使用密码登录)。请参阅:https://github.com/cli/cli#installation,https://cli.github.com/manual/gh_auth_login - Nagabhushan S N
31个回答

4
可以使用GitHub 部署密钥来实现,部署密钥可以限制对一个特定的 GitHub 仓库的访问权限,并使写入权限变为可选。
GitHub 部署密钥使用用户生成的 SSH 密钥,使用ssh-keygen创建私钥文件和公钥文件。
假设ssh-keygen中给出的密钥名称为key-test,则私钥文件和公钥文件保存在~/.ssh/key-test~/.ssh/key-test.pub
假设 GitHub 项目名称为keytest
要通过 GitHub 项目网页添加部署密钥,请转到设置/部署密钥,然后单击添加。将公钥文件~/.ssh/key-test.pub的内容粘贴到目标框中并确认即可。
修改您的~/.ssh/config文件,包括以下内容:
Host gh-keytest
        Hostname github.com
        IdentityFile=/home/user/.ssh/key-test

注意: gh-keytest 是任意的别名。

现在你可以使用以下方式进行推送:

git push git@gh-keytest:<githubaccountname>/keytest.git

只使用推送完成它
git remote remove origin  # in case origin is already set
git remote add origin git@gh-keytest:<githubaccountname>/testscope.git
git push --set-upstream origin main

注意:将main替换为正确的分支名称。

此后

git push 

足够。

只有在你的 GitHub 组织不需要 SAML SSO 时,此方法才有效。如果需要,你必须像其他答案中演示的那样使用令牌。TO 没有说明他们是否符合这种情况,但对于其他寻求解决方案的人来说,这可能是相关的。 - trs

4

最近github不再允许使用我们的用户名和密码直接通过cmd进行提交。 为此,我们需要按照这里的详细说明生成访问令牌。

然后在命令提示符中使用相同的访问令牌作为git命令(git pushgit pull等)的用户名和密码。 例如:

git push origin master
Username for 'https://github.com': lhq_4npmklMYXXXXXXXXXXXXXXXXXXXL8SxHxU
Password for 'https://lhq_4npmklMYXXXXXXXXXXXXXXXXXXXL8SxHxU@github.com':<give same access token here as password too>

你会开始看到代码日志如下:

Enumerating objects: 24, done.
Counting objects: 100% (24/24), done.
Delta compression using up to 8 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (18/18), 6.33 KiB | 539.00 KiB/s, done.
Total 18 (delta 5), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (5/5), completed with 2 local objects.
To https://github.com/xxxxxxxxxxx/xxx-xxxxx-repo.git
123456..1233456  master -> master

希望这能对某些人有所帮助。愉快编程! :)

1
运行得非常好。只是好奇是否可以将我们的令牌保存在某个地方,这样我们就不必每次都复制和粘贴了?比如在git配置文件中?如果可以的话,我想在我的Windows WSL中运行它,如果有帮助的话。 - Rahul Saxena

4

对于来自GitLab的用户,以下是我所使用的方法:

前提条件:

创建一个访问令牌:

    1. 选择必要的权限
    1. 选择过期日期
    1. 按下“创建个人访问令牌”按钮生成令牌
  • 保存该访问令牌!

步骤1:

添加远程库:

git remote add origin https://<access-token-name>:<access-token>@gitlab.com/path/to/project.git

步骤2:

拉取一次代码:

https://<access-token-name>:<access-token>@gitlab.com/path/to/project.git

现在你可以在该代码库中进行读写操作了


3

使用新的访问令牌更新您的远程代码库

git remote set-url origin https://{{your_username}}:{{your_new_token}}@github.com/{{repo_path}}.git

2
这是针对一个仓库的,如何同时授予所有仓库访问权限? - Brendan Metcalfe

3

我为这个问题苦苦挣扎了一整天,将ORG/REPO部分硬编码到构建脚本中,结果出现了可怕的“找不到远程”错误。最终,我通过使用TRAVIS_REPO_SLUG找到了一个可行的解决方案。

将其替换为硬编码属性后立即生效。

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

3

对于 Mac 用户:

  1. 打开 钥匙串访问 并找到 GitHub。

  2. 右键单击 GitHub。

  3. 点击删除。

  4. 打开终端并尝试克隆私有项目。

  5. 添加所需的值:
    用户名:$你的 GitHub 用户名
    密码:$粘贴令牌在此处
    然后按下 Enter。就这样,令牌已经被添加了。


2

1

在尝试了很多小时后,终于成功使用GitHub token,代码如下:

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

  • 代码遵循Codefresh的指导,使用token(freestyle)克隆存储库
  • 测试采用sed %d%H%M匹配单词'-123456-whatever'
  • 推回到存储库(这是私有存储库
  • DockerHubwebhooks触发

以下是完整代码:

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 

1
  1. 克隆您的项目 -> git clone https://token@github.com//project.git
  2. 在项目文件夹中 -> git config --global credential.helper cache

然后开始工作


1
Android Studio中选择vcs→push选项卡。弹出窗口将显示用户名和密码。输入您的用户名,而不是密码,请输入令牌号码。它将被推送到存储库中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接