使用令牌与GitHub进行身份验证

我正在尝试使用个人访问令牌与GitHub进行身份验证。在GitHub的帮助文件中,它声明使用cURL方法进行身份验证(创建个人访问令牌)。我已经尝试过了,但是我仍然无法推送到GitHub。请注意,我正在尝试从未经身份验证的服务器(特拉维斯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:匿名访问scuzzlebuzz /ol3-1。git否认。

致命:'https://github.com/scuzzlebuzzle/ol3-1.git/'"认证失败;

1036695 次浏览

你的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. . exe将被删除

为了避免交出“城堡的钥匙”……

注意,sigmavirus24的响应要求你给Travis一个具有相当广泛权限的令牌——因为GitHub只提供具有广泛作用域的令牌,如“写我所有的公共回购”或“写我所有的私人回购”。

如果你想要收紧访问(需要更多的工作!),你可以使用GitHub部署密钥结合Travis加密yaml字段。

这里是一个示意图的技术如何工作…

首先生成一个名为my_key的RSA部署密钥(通过ssh-keygen),并将其作为部署密钥添加到你的github repo设置中。

然后……

$ 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密钥,这避免了在连接时手动接受的需要。

自动化/使用OAuth令牌的Git自动化

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

它也适用于git push命令。

< p >参考: https://help.github.com/articles/git-automation-with-oauth-tokens/ < / p >

首先,需要创建一个个人访问令牌(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>

实际上,当我远程工作时,公司政策迫使我启用双因素身份验证,但仍然有本地更改,所以实际上我需要的不是clone,而是push。我在很多地方读到我需要删除和重新创建远程,但实际上我的普通push命令与上面的clone完全相同,并且远程没有改变:

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

(@YMHuang用文档链接让我找到了正确的方向。)

这为我工作使用ssh:

设置开发人员设置生成新令牌

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

通过在应用GitHub令牌上挣扎了这么多小时,最终它的工作原理如下:

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

.password
  • 代码遵循Codefresh关于使用令牌克隆回购的指导(freestyle}
  • 测试进行: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

用于登录github.com门户的密码在Visual Studio代码 CLI/shell中无效。您应该从URL https://github.com/settings/tokens复制PAT令牌,生成一个新令牌,并将该字符串粘贴到CLI中作为密码。

通常我是这样做的:

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

git_tokenAzure DevOps中的变量配置中读取。

你可以阅读我的完整博客文章在这里

如果你正在使用GitHub企业,克隆存储库或推送给你一个403错误,而不是提示输入用户名/令牌,你可以使用这个:

  1. 删除存储库

  2. 打开命令提示符并导航到您想要存储库的文件夹

  3. < p >类型:

    git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
    

在与这个问题斗争了差不多一整天之后,在ORG/REPO部分硬编码到我们的构建脚本中得到可怕的“远程未找到”错误,最终我通过使用TRAVIS_REPO_SLUG找到了一个有效的解决方案。

将此转换为硬编码属性立即起作用。

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

步骤1:获取访问令牌

进入这个链接:https://github.com/settings/tokens。然后生成令牌。 < br > < br > 从你的Github帐户,转到:
设置→开发人员设置->个人访问令牌

步骤2:使用令牌

git push


Username: <your username>
Password: <the access token>

我在Ubuntu 20.04(焦点Fossa)上,我一直收到消息,很快我就无法从控制台登录。我非常困惑。

最后,我得到了下面的URL将工作。但是你需要知道如何创建一个帕特(个人访问令牌),你必须把它保存在你的计算机上的一个文件中。

下面是最终URL的样子:

git push https://1234567890123456789012345678901234567890@github.com/user-name/repo.git

长PAT(个人访问令牌)值——URL中//和@符号之间的整个长值就是你的PAT。

用户名将是你的用户名

repo.git将是您的确切存储库名称

你也可以这样使用它:

当你做

git push

1.将提示输入用户名和密码

2.只要提交你的用户名正常

3.现在提交你的PAT作为你的密码,它将工作。

你需要按照创建个人访问令牌的步骤生成一个PAT

这将为您提供PAT值,您将放置在您的URL。

当您创建PAT时,请确保您选择了以下选项,以便它能够允许您管理存储库。

PAT settings

拯救你的PAT或失去它

获得PAT后,需要将其保存在本地文件中,以便再次使用。如果你不把它保存在某个地方,就没有办法再看到它,你将被迫创建一个新的PAT。

现在你至少需要:

  1. 在控制台中显示它的方法,以便您可以再次看到它。
  2. 或者,一种自动复制到剪贴板的方法。

对于1,使用即可:

cat ~/files/myPatFile.txt

其中路径是存储PAT值的位置和文件的真实路径。

2

xclip -selection clipboard < ~/files/myPatFile.txt

这将把文件的内容复制到剪贴板,这样您就可以更容易地使用PAT。

供您参考-如果您没有xclip,请执行以下操作:

sudo apt-get install xclip

它下载并安装xclip。如果你没有apt-get,你可能需要使用另一个安装程序(比如百胜)。

对于那些来自GitLab的人,什么对我有效:

先决条件:

创建令牌:

    1. 选择必要的权限
    1. 选择截止日期
    1. 通过按create personal access token生成
  • 保存token!

步骤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

现在您可以从存储库中读取/写入数据了

对于macOS,如果没有提示您输入用户名和密码请求,则意味着您的密码存储在Keychain Access中。每次你尝试克隆或推它将尝试使用您的旧密码。

遵循以下三个步骤来解决这个问题:

  1. 生成一个帕特(个人访问令牌)- 链接
  2. 打开钥匙链访问(通过聚光灯搜索)→搜索GitHub→单击GitHub→更改并保存与您的新PAT 链接
  3. 尝试再次推送或克隆。现在您已经存储了PAT而不是密码。

Mac用户:

  1. 打开钥匙链访问,找到GitHub

  2. 右键单击GitHub

  3. < p >单击“删除”

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

  5. 添加所需值
    用户名:$your GitHub用户名
    密码:$paste token here
    并点击输入

    . Voilà - token已经添加

我以前使用密码使用Git CLI访问我的私有存储库,并使用git config --global credential.helper store保存了我的凭据。

由于今天已经放弃了对密码的支持,我无法使用git config命令来更新我的凭据。

如果其他人在Linux上有这个问题,你可以手动更新~/.git-credentials文件,例如:

nano ~/.git-credentials

:@符号之间输入令牌。(保存并关闭文件,按Ctrl + O输入Ctrl + X)。

你可能还必须在证书文件中更新你的令牌后运行以下命令(参见@guhur的评论):

git config --global credential.helper store

注意,通过使用Git的凭据助手,任何有权访问您的主目录的人都可以看到您的令牌。

Windows:

  1. 打开凭证管理器- Windows凭证
  2. 找到git:https://github.com的条目,编辑它
  3. 用PAT访问令牌替换以前的密码
  4. 解决了
  1. 克隆你的项目>Git克隆https://token@github.com//project.git
  2. 在项目文件夹->Git配置——全局凭据。辅助缓存

和工作

生成令牌

使用创建个人访问令牌中的指令生成一个令牌。

实际上使用令牌

  • 如果您已经在本地克隆了存储库
git remote remove origin
git remote add origin https://[TOKEN]@github.com/[REPO-OWNER]/[REPO-NAME]
git push
  • 如果您正在克隆一个新的存储库
git clone https://[TOKEN]@github.com/[REPO-OWNER]/[REPO-NAME]

(将方括号和方括号之间的内容替换为相应的详细信息。@后面的部分与不带https://)的存储库url相同

使用新的访问令牌更新远程回购

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

下面的步骤对我很有用:

  1. < p > git remote remove origin

  2. < p > git remote add origin https://[TOKEN]@[REPO LINK]

例如,我的回购名称是:https://github.com/username/codf.git

命令如下:

git remote add origin https://[TOKEN]@github.com/username/codf.git

  1. git push origin branchName

Android工作室中选择vcs→push标签。弹出窗口将显示用户名和密码。输入您的用户名,而不是密码,输入令牌号码。它会被推送到存储库。

您可以轻松地更改远程认证,首先:

删除当前原点:

git remote remove origin

然后:

git remote add origin https://<TOKEN>@github.com/<USERNAME>/<REPO>.git

你可以找到如何生成你的身份验证令牌在这里

因为我使用的是macOS,我可以为macOS具体回答这个问题。 我们也可以在Windows上使用这个。它的工作原理! 在你的GitHub帐户中,单击右上角的头像,并进入设置配置文件.

点击设置:

settings

点击开发人员设置:

开发者设置

点击个人访问令牌:

个人访问令牌

个人访问令牌(详细信息) < / >

然后点击生成新令牌:

generate new token

为您的访问令牌提供一个名称,并检查第一个选项。

向下滚动并单击generate token

现在,当你推送repo时,使用以下语法:

git remote add origin https:<access__token>://@github.com/<username>/<repo__name>.git


git push https://<access__token>@github.com/<username>/<repo__name>.git

在我看来,你可以使用第二种选择,同时按下回购提供访问令牌,你就可以了。

最近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 remote remove origin
    
  2. git remote add origin https://{accesstoken}:{accesstoken}@gitlab.com/{username}/{repo}.git
    
  3. git push https://{youraccesstoken}@github.com/{username}/{repo}.git
    

这对我很有用。

从开发人员设置生成访问令牌后,运行这些命令, git push origin [branch] Username for 'https://github.com': [accessToken] Password for 'https://[accessToken]@github.com':[accessToken] < / p >

我为这个问题所困扰,但我找到了解决办法:

git push https://github.com/<username>/<project_name>
and
username: paste your personnal access token
password: paste your personnal access token

唯一的答案,帮助我在一个VS Code环境和一个私人GitHub。

  • 第一次=比;在这里生成令牌:https://github.com/settings/tokens
  • 第二个=比;做一个"cd"到你的VS Code终端的正确位置。
  • 第三=比;下面这个例子:

git clone https://[MY_USER_NAME]:[GITHUB_PERSONAL_ACCESS_TOKEN]@github.com/davidsonlima/davidson-myrepo.git不带方括号

这可以使用Github部署密钥来完成,它缩小了对单个github回购的访问权限,以及使写权限可选。

Github部署密钥使用用户生成的ssh密钥,使用ssh-keygen创建一个私钥文件和一个公钥文件。

假设给定的键名ssh-keygenkey-test,私有文件和公共文件分别位于~/.ssh/key-test~/.ssh/key-test.pub中。

假设github项目名称是keytest

要通过github项目网页向项目添加部署键,获取settings/deploy keys并单击add。将公钥文件~/.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

是充分的。

我必须添加oauthoauth2作为用户名才能成功验证:

https://oauth:<TOKEN>@github.com/user/repo.git