Аутентификация с 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/ "

Ответы:


192

Ваша curlкоманда совершенно неверна. Вы должны использовать следующие

curl -H 'Authorization: token <MYTOKEN>' ...

Кроме того, это не разрешает вашему компьютеру клонировать репозиторий, если он на самом деле является частным. (Однако взгляд показывает, что это не так.) Обычно вы делаете следующее:

git clone https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git --branch=gh-pages gh-pages

Это добавит ваши учетные данные на пульт, созданный при клонировании репозитория. Однако, к сожалению, вы не можете контролировать, как Трэвис клонирует ваш репозиторий, поэтому вам нужно отредактировать пульт таким образом.

# 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

1
Я не знаю, о какой кнопке редактора вы говорите, но удалить исходный пульт абсолютно необходимо.
Ян Стэплтон Кордаско


4
Вам не нужно управлять пультом дистанционного управления, вместо этого вы можете использовать set-url, как вgit remote set-url origin https://scuzzlebuzzle:<MYTOKEN>@github.com/scuzzlebuzzle/ol3-1.git
berkus

1
Небезопасный подход. Ключ легко попадет в журнал при ошибке. Вместо этого используйте ключ развертывания с жесткой границей.
Джозеф Ласт

54

Во-первых, вам нужно создать токен личного доступа (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 направил меня на правильный путь с помощью ссылки на документацию.)


Спасибо за это,
Сурья Пракаш Патель

прекрасно.
Самим Афтаб Ахмед

Я несколько раз пробовал этот подход, но столкнулся с той же проблемой. Я сгенерировал PTA, а затем попытался аутентифицироваться после выполнения команды push, указав свое имя пользователя и свой токен. Он по-прежнему говорит мне, что учетные данные неверны. Что мне не хватает на этих этапах?
johnny_kb

30

Чтобы не передать «ключи от замка» ...

Обратите внимание, что ответ sigmavirus24 требует, чтобы вы предоставили Трэвису токен с довольно широкими разрешениями - поскольку GitHub предлагает только токены с широкими областями действия, такими как «напишите все мои публичные репозитории» или «напишите все мои частные репозитории».

Если вы хотите ограничить доступ (с немного большей работой!), Вы можете использовать ключи развертывания GitHub в сочетании с зашифрованными полями yaml Travis.

Вот набросок того, как работает эта техника ...

Сначала сгенерируйте вызванный ключ развертывания RSA (через ssh-keygen) 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

Примечание: последняя строка предварительно заполняет ключ RSA github, что позволяет избежать необходимости принимать вручную во время подключения.


30

Автоматизация / автоматизация Git с помощью токенов OAuth

$ 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, что может считаться угрозой безопасности.
Джером

отличная ссылка - txs!
dalcam

прекрасное спасибо 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
pacoverflow

Разве это не плохая идея? Не будет ли токен кеширован в истории консоли?
TheRealChx101

Также у меня работал git remote add origin https: // [TOKEN] @ git.mycompany.com / [ORGANIZATION] / [REPO] .git
Thomas Chafiol

@ TheRealChx101 Вы можете использовать что-то вроде, git remote set-url origin https://[TOKEN]@git.mycompany.com/[ORGANIZATION]/[REPO].git> /dev/null 2>&1чтобы избежать регистрации небезопасного вывода git. Сохраните токен в переменной, чтобы избежать его в журнале. Но его нужно где-то хранить. Для большей безопасности вы можете хранить его в зашифрованном виде. Этот подход, например, поддерживается Travis CI.
Кап

3

Обычно мне это нравится

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

Git_token читает из переменной config в azure DevOps.

Вы можете прочитать мой блог полностью здесь


1

Бороться с этой проблемой в течение почти целого дня жесткого кодирования в разделе ORG / REPO в нашем сценарии сборки, получая ужасную ошибку «удаленный не найден», в конечном итоге нашел рабочее решение - использовать 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 по клонированию репо с использованием токена (свободный стиль)
  • проведен тест: 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 

0

Пароль, который вы используете для входа на портал github.com, не работает в VS Code CLI / Shell. Вы должны скопировать токен PAT из URL https://github.com/settings/tokens , сгенерировав новый токен и вставив эту строку в интерфейс командной строки в качестве пароля.


0

Если вы используете GitHub Enterprise и клонирование репо или нажатие дает вам ошибку 403 вместо запроса имени пользователя / токена, вы можете использовать это:

  1. Удалить репо
  2. Откройте командную строку и перейдите в папку, в которой вы хотите разместить репо.
  3. Тип:
git clone https://[USERNAME]:[TOKEN]@[GIT_ENTERPRISE_DOMAIN]/[ORGANIZATION]/[REPO].git
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.