Перевірте автентифікацію з 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 відхилений.

fatal: Не вдалося встановити автентифікацію для " https://github.com/scuzzlebuzzle/ol3-1.git/ " "

Відповіді:


191

Ваша 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.


Дякую ТАК велике за допомогу. Це спрацювало чудово. Ось копія зміненого файлу: github.com/scuzzlebuzzle/ol3-1/blob/master/util/s.sh . Я зрозумів це досить близько. Чомусь він не натискав на створений мною каталог директора build1, але все-таки натискав на каталог збірки, щоб він працював! ДЯКУЮ!
wayofthefuture

1
Я не знаю, про яку кнопку редактора ви говорите, але видалення оригінального пульта абсолютно необхідне.
Ian Stapleton Cordasco

1
Хе. Класно. Радий допомогти.
Ian Stapleton Cordasco

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

1
Невпевнений підхід. Ключ легко переходив до журналу про помилку. Використовуйте замість цього ключ розгорнутої щільності.
Йосип Похоть

53

По-перше, вам потрібно створити персональний маркер доступу (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>

Насправді я був змушений включити двофакторну автентифікацію за політикою компанії, коли я працював віддалено і все ще мав місцеві зміни, тому насправді це було не cloneпотрібно, але push. Я читав у багатьох місцях, що мені потрібно було видалити та відтворити віддалений, але насправді моя звичайна pushкоманда працювала точно так само, як cloneописано вище, а віддалений не змінювався:

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

(@YMHuang поставив мене на правильний шлях із посиланням на документацію.)


Дякую за це, я теж стояв перед тим же завданням
Surya Prakash Patel

ідеально чудово.
Самім Афтаб Ахмед

Я кілька разів спробував цей підхід, але зіткнувся з тим же питанням. Я створив PTA, а потім спробував пройти автентифікацію після виконання push-команди, поставивши своє ім’я користувача та мітку. Це все ще говорить мені, що облікові дані неправильні. Що мені не вистачає в цих кроках?
johnny_kb

30

Щоб не здавати "ключі від замку" ...

Зауважте, що відповідь sigmavirus24 вимагає, щоб ви надали тракену Travis з досить широкими дозволами - оскільки GitHub пропонує лише жетони з широкими рамками, наприклад "написати всі мої публічні репости" або "написати всі мої приватні репости".

Якщо ви хочете обмежити доступ (трохи більше роботи!), Ви можете скористатися клавішами розгортання GitHub у поєднанні з шифрованими полями ямлів Travis.

Ось ескіз того, як працює техніка ...

Спочатку згенеруйте ключ розгортання RSA (через ssh-keygen) my_keyі додайте його як ключ розгортання у своїх налаштуваннях 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

Примітка: останній рядок попередньо заповнює ключ 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щоб уникнути реєстрації невпевнених вихідних даних. Зберігайте маркер у змінній, щоб не мати його в журналі. Але його потрібно десь зберігати. Для подальшої безпеки ви можете зберігати його в зашифрованому вигляді. Наприклад, такий підхід підтримується Travis CI.
кап

3

Зазвичай мені це подобається

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

Git_token читає зі змінної конфігурації у блакитному депеші.

Ви можете прочитати мій повний блог тут


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 щодо клонування репо за допомогою маркера (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 

0

Пароль, який ви використовуєте для входу на портал github.com, не працює у VS Code CLI / Shell. Ви повинні скопіювати маркер PAT з URL-адреси https://github.com/settings/tokens , створивши новий маркер і вставити цю рядок у CLI як пароль.


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.