使用令牌对GitHub进行身份validation

我正尝试使用个人访问令牌对GitHub进行身份validation。 在github的帮助文件中,它声明使用curl方法进行身份validation( https://help.github.com/articles/creating-an-access-token-for-command-line-use )。 我已经尝试过,但仍然无法推送到GitHub。 请注意,我试图从未经身份validation的服务器(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否认。

致命:validation失败的' 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 

这会将您的凭据添加到克隆存储库时创build的远程。 然而不幸的是,你无法控制Travis如何克隆你的仓库,所以你必须像这样编辑远程。

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

这将修复您的项目使用内置凭据的远程。

为了避免把钥匙交给城堡…

请注意,sigmavirus24的回应要求你给Travis一个相当宽的权限 – 因为GitHub只提供像“写我所有的公共回购”或“写我所有的私人回购”这样的广泛范围的令牌。

如果您想要加强访问权限(稍加工作!),您可以使用GitHub部署密钥与Travisencryption的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密钥,这样可以避免在连接时需要手动接受。

使用OAuth令牌进行自动化/ 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/

@YMHuang把我的文档链接放在正确的轨道上。

首先,您需要创build一个个人访问令牌。 这在这里描述: https : //help.github.com/articles/creating-an-access-token-for-command-line-use/

可笑的是,文章告诉你如何创build它,但绝对不知道如何处理它。 经过大约一个小时的拖网文件,我终于find了答案:

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

实际上,当我在远程工作的时候,我实际上被迫通过公司策略来启用2FA,并且仍然有本地更改,所以实际上并不是我需要的clone ,而是push 。 我读了很多地方,我需要删除和重新创build远程,但实际上我正常的push命令工作完全一样的clone上面,远程没有改变: –

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