我正在尝试使用个人访问令牌向 GitHub 进行身份验证。在 GitHub 的帮助文件中,它声明使用 cURL 方法进行身份验证 (Creating a personal access token)。我已经尝试过了,但我仍然无法推送到 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/”的身份验证失败”
您的 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 会以纯文本形式将其写入您的 .git/config 文件,这存在安全风险。
首先,您需要创建个人访问令牌 (PAT)。此处对此进行了描述:https://help.github.com/articles/creating-an-access-token-for-command-line-use/
可笑的是,这篇文章告诉你如何创建它,但完全不知道如何处理它。经过大约一个小时的拖网文档和堆栈溢出,我终于找到了答案:
$ git clone https://github.com/user-or-organisation/myrepo.git
Username: <my-username>
Password: <my-personal-access-token>
实际上,当我在远程工作并且仍然有本地更改时,公司政策迫使我启用 two-factor authentication,所以实际上我需要的不是 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
git remote add origin https://[USERNAME]:[NEW TOKEN]@github.com/[USERNAME]/[REPO].git
git remote add origin https://[USERNAME]:[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1
之类的东西来避免记录不安全的 git 输出。将令牌存储在变量中以避免将其包含在日志中。但它需要存储在某个地方。为了进一步安全,您可以将其加密存储。例如,Travis CI 支持这种方法。
git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
使用 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/
生成令牌
我使用 Creating a personal access token 中的说明生成了一个令牌。
实际使用令牌
以下序列对我有用:
git remote remove origin
git remote add origin https://[TOKEN]@github.com/[USER]/[REPO]
git push
git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git
,它只适用于 git pull,但是当我运行命令 git push 时,git 再次提示输入用户名。一次又一次地将令牌放入密码字段很烦人,所以上面提到的相同顺序的命令对我有用。
remove
来源然后添加。它将被覆盖,因此只需 add
就足够了
第 1 步:获取访问令牌
转到此链接:https://github.com/settings/tokens。并在那里生成令牌。
或来自您的 Github 帐户,转到:
设置 ->开发者设置->个人访问令牌
第 2 步:使用令牌
git push 用户名:<您的用户名> 密码:<访问令牌>
$ git config credential.helper store
,否则我无法让它工作。注意:凭据将不加密地保存在您的主目录内的文件中,因此请谨慎使用。 A better explanation can be found here
为了避免交出“城堡的钥匙”……
请注意,sigmavirus24 的响应要求您向 Travis 提供具有相当广泛权限的令牌——因为 GitHub 仅提供具有广泛范围的令牌,例如“写我所有的公共仓库”或“写我所有的私人仓库”。
如果您想收紧访问权限(需要做更多工作!),您可以使用 GitHub 部署密钥和 Travis 加密的 yaml 字段。
这是该技术如何工作的草图...
首先生成一个名为 my_key
的 RSA 部署密钥(通过 ssh-keygen
),并将其作为部署密钥添加到您的 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 密钥,这样就避免了在连接时手动接受的需要。
对于 macOS,如果未提示您输入用户名和密码请求,则表示您的密码存储在 Keychain Access 中。每次您尝试克隆或推送时,它都会尝试使用您的旧密码。
请按照以下三个步骤解决此问题:
生成 PAT(个人访问令牌)- LINK 打开 KeyChain Access(通过聚光灯搜索)→ 搜索 GitHub → 单击 GitHub → 更改并使用新的 PAT 链接保存尝试再次推送或克隆。现在您已经存储了 PAT 而不是密码。
通常我喜欢这样:
git push https://$(git_token)@github.com/user_name/repo_name.git
git_token 正在从 Azure DevOps 中的变量 config 中读取。
您可以阅读我的完整博文 here。
我在 Ubuntu 20.04(Focal Fossa)上,我不断收到消息,很快我将无法从控制台登录。我非常困惑。
最后,我找到了下面的 URL,它可以工作。但是您需要知道如何创建 PAT(个人访问令牌),您必须将其保存在计算机上的文件中。
最终 URL 如下所示:
git push https://1234567890123456789012345678901234567890@github.com/user-name/repo.git
long PAT(个人访问令牌)值——URL 中 // 和 @ 符号之间的整个 long 值就是您的 PAT。
用户名将是您的确切用户名
repo.git 将是您的确切存储库名称
您也可以通过这种方式使用它:
当你做一个
git push
1. 系统会提示您输入用户名和密码
2. 像往常一样提交您的用户名
3. 现在提交您的 PAT 作为您的密码,它将起作用。
您需要按照以下步骤生成 PAT:Creating a personal access token
这将为您提供将放置在 URL 中的 PAT 值。
创建 PAT 时,请确保选择以下选项,以便它能够允许您管理存储库。
https://i.stack.imgur.com/VydLH.png
保存您的 PAT 或丢失它
获得 PAT 后,您需要将其保存在本地文件中,以便再次使用它。如果您不将它保存在某个地方,就无法再次看到它,您将被迫创建一个新的 PAT。
现在你至少需要:
一种在控制台中显示它的方法,以便您再次看到它。或者,一种将其自动复制到剪贴板的方法。
对于 1,只需使用:
cat ~/files/myPatFile.txt
其中路径是您存储 PAT 值的位置和文件的真实路径。
为 2
xclip -selection clipboard < ~/files/myPatFile.txt
这会将文件的内容复制到剪贴板,以便您可以更轻松地使用 PAT。
仅供参考 - 如果您没有 xclip,请执行以下操作:
sudo apt-get install xclip
它下载并安装 xclip。如果您没有 apt-get
,您可能需要使用另一个安装程序(如 YUM)。
git config credential.helper cache
可用于保存密码,默认为 15 分钟。此外,git config credential.helper store
可用于永久存储该存储库的密码(不太“安全”)。更多信息here
我之前使用密码通过 Git CLI 访问我的私人存储库,并使用 git config --global credential.helper store
保存了我的凭据。
由于今天已取消对密码的支持,因此我无法使用建议的 git config
命令使用令牌更新我的凭据。
如果其他人在 Linux 上遇到此问题,您可以手动更新 ~/.git-credentials
文件,例如
nano ~/.git-credentials
在 :
和 @
符号之间输入您的令牌。 (要保存和关闭文件,请按 Ctrl + O、Enter、Ctrl + X< /kbd>)。
在凭证文件中更新令牌后,您可能还必须运行以下命令(请参阅@guhur 的评论):
git config --global credential.helper store
请注意,通过使用 Git 的凭证助手,任何有权访问您的主目录的人都可以看到您的令牌。
git config --global credential.helper store
您可以轻松更改远程身份验证,首先:
删除您当前的来源:
git remote remove origin
接着:
git remote add origin https://<TOKEN>@github.com/<USERNAME>/<REPO>.git
您可以找到如何生成身份验证令牌 here。
以下步骤对我有用:
git remote remove origin 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
git push origin 分支名称
由于我使用的是 macOS,我可以专门为 macOS 回答这个问题。我们也可以将它用于 Windows。有用!!在您的 GitHub 帐户中,单击右上角的头像并转到设置 profile。
点击设置:
https://i.stack.imgur.com/nINrn.png
点击开发者设置:
https://i.stack.imgur.com/Ub5aH.png
单击个人访问令牌:
https://i.stack.imgur.com/NpYBK.png
https://i.stack.imgur.com/RvfGr.png
然后点击生成新令牌:
https://i.stack.imgur.com/VjOLY.png
为您的访问令牌命名并检查第一个选项。
向下滚动并单击生成令牌
现在,当您推送存储库时,请使用以下语法:
git remote add origin https:<access__token>://@github.com/<username>/<repo__name>.git
git push https://<access__token>@github.com/<username>/<repo__name>.git
在我看来,您可以使用第二个选项,同时推送 repo 提供访问令牌,您就可以开始了。
在 VS Code 环境和私有 GitHub 中帮助我的唯一答案。
首先 => 在此处生成令牌:https://github.com/settings/tokens。
第二 => 在 VS Code 终端的正确位置执行“cd”。
第三个 => 如下所示:
git clone https://[MY_USER_NAME]:[GITHUB_PERSONAL_ACCESS_TOKEN]@github.com/davidsonlima/davidson-myrepo.git
不带方括号
如果您使用 GitHub Enterprise 并且克隆存储库或推送给您 403 错误而不是提示输入用户名/令牌,您可以使用以下方法:
删除存储库 打开命令提示符并导航到您想要存储库的文件夹类型: git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
git clone https://davidsonlima:qwertyuiopasdfghjklzxcvbnm@github.com/davidsonlima/davidson-myrepo.git
git remote remove origin git remote add origin https://{accesstoken}:{accesstoken}@gitlab.com/{username}/{repo}.git push https://{youraccesstoken}@github.com/{username} /{repo}.git
这对我有用。
我遇到了这个问题,但找到了解决方案:
git push https://github.com/<username>/<project_name>
and
username: paste your personnal access token
password: paste your personnal access token
我必须添加 oauth
或 oauth2
作为用户名才能成功验证:
https://oauth:<TOKEN>@github.com/user/repo.git
最近 github 不允许使用我们的用户名和密码直接从 cmd 提交。为此,我们需要生成详细说明的访问令牌 here。
然后在 git 命令 git push
、git 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
希望这可以帮助某人。快乐编码! :)
对于 Windows:
打开 Credential Manager - Windows Credentials 找到 git 的入口:https://github.com,编辑它 用 PAT 访问令牌替换你以前的密码 已解决
在为这个问题苦苦挣扎了将近一整天之后,将 ORG/REPO 部分中的硬编码到我们的构建脚本中,得到了可怕的“找不到远程”错误,最终我通过使用 TRAVIS_REPO_SLUG
找到了一个可行的解决方案。
将其切换为硬编码属性会立即起作用。
git remote set-url origin https://[ORG]:${TOKEN}@github.com/${TRAVIS_REPO_SLUG}
对于来自 GitLab 的人,什么对我有用:
先决条件:
创建令牌:
选择必要的权限
选择必要的权限
选择到期日
选择到期日
按创建个人访问令牌生成
按创建个人访问令牌生成
保存令牌!
步骤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
现在您可以从存储库读取/写入/写入
对于 Mac 用户:
打开 Keychain Access 找到 GitHub 在 GitHub 中右键点击删除 打开终端尝试克隆一个私有项目 添加所需的值 Username: $your GitHub username Password: $paste token here 然后回车。 Voilà - 已添加令牌。
它可以使用 github deploy keys 来完成,它缩小了对单个 github 存储库的访问范围以及使写入权限可选。
Github 部署密钥使用用户生成的 ssh 密钥,该密钥使用 ssh-keygen
创建一个私钥文件和一个公钥文件。
假设给定 ssh-keygen
的密钥名称是 key-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
仅使用 push 来完成
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 令牌上挣扎了这么多小时,它的工作原理如下:
$ cf_export GITHUB_TOKEN=$(codefresh 获取上下文 github --decrypt -o yaml | yq -y .spec.data.auth.password)
代码遵循 Codefresh 关于使用令牌克隆 repo 的指南(freestyle}
进行的测试:sed %d%H%M on match word '-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
使用新的访问令牌更新您的远程仓库
git remote set-url origin https://{{your_username}}:{{your_new_token}}@github.com/{{repo_path}}.git
您用于登录 github.com 门户的密码在 Visual Studio Code CLI/shell 中无效。您应该从 URL https://github.com/settings/tokens 复制 PAT 令牌,方法是生成一个新令牌并将该字符串粘贴到 CLI 中作为密码。
克隆你的项目 -> git clone https://token@github.com//project.git 在项目文件夹中 -> git config --global credential.helper cache
和工作
git remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git