Після ввімкнення 2FA автентифікація Git не вдається


97

Я щойно увімкнув 2FA (я не можу згадати жодних інших змін, які я вніс), і git попросив ввести моє ім’я користувача та пароль. Я надав обидва, але вони "помилились". Я спробував багато рішень тут: Git push вимагає ім’я користувача та пароль, але це не спрацювало. Зокрема, при переході з https на ssh клавіша ssh видає

Дозвіл відмовлено (відкритий ключ). fatal: Не вдалося прочитати з віддаленого сховища.

$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)

Username for 'https://github.com': **********
Password for 'https://mlbileschi@github.com': 
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/mlbileschi/scala.git/'

Якісь поради?


1
"Дозвіл відхилено (publickey). Fatal: Не вдалося прочитати з віддаленого сховища." - це окрема проблема, яку можна вирішити, встановивши ключ SSH для свого облікового запису: help.github.com/articles/…
Ajedi32

1
часто це не проблема 2FA, а натомість вирішується шляхом зміни з https на git
SCBuergel.

Відповіді:


125

Вам потрібно згенерувати маркер доступу. Ви можете створити його, перейшовши на сторінку налаштувань .

введіть тут опис зображення

Використовуйте цей маркер доступу як свій пароль у командному рядку.


хм, я спробував це після set-url на https, і це не спрацювало. Я також спробував set-url повернутися до ssh і видалити запис .ssh / known_hosts, але безрезультатно.
Макс Білескі

Чи можете ви додати запитання командного рядка до свого запитання? Включаючи команди, які ви виконуєте.
Герго Ердосі,

Вихід був доданий
Макс Білескі

У мене була якась дивна проблема, коли мені довелося розпочати клон і ввести свій новий маркер доступу. Після цього (навіть не дочекавшись завершення клонування), я зміг надати свій новий маркер доступу до мого початкового каталогу, який я намагався запустити git pull. Можливо, локальна проблема, але це може комусь допомогти.
сер.

Я отримую, The requested URL returned error: 403коли використовую маркер для пароля, для натискання на https
stelios

38

Наскрізне рішення займає 3 кроки.

  1. Похвала Герго Ердосі. Його відповідь у значній мірі правильна, просто Github змінює цю сторінку налаштувань. Станом на кінець 2016 року вам потрібно згенерувати маркер доступу на своїй сторінці особистих маркерів доступу .

    введіть тут опис зображення

    Використовуйте цей маркер доступу як свій пароль у командному рядку.

  2. Ви можете зберегти своє ім’я користувача, включивши його до віддаленої URL-адреси проекту. Один із способів це зробити - це відредагувати .git/configта змінити urlрядок у такий формат:

    url = https://YOUR_USERNAME_HERE@github.com/owner/repo.git

  3. Ви можете зберегти свій пароль, запустивши це лише один раз:

    $ git config credential.helper store

    і тоді ваші майбутні паролі git зберігатимуться у ~ / .git-облікових даних у відкритому тексті, використовуючи формат https://user:PlaintextPassword@example.com.

    Зберігання паролів у відкритому тексті зазвичай розглядається як ризик безпеки. Але в цьому випадку 2FA облікові дані - це НЕ ваш справжній пароль, це випадково сформований рядок. Отже, це так само безпечно, як використання приватного ключа ssh та приватного ключа ssh без парольної фрази. CAVEAT: майте на увазі, що якщо ви також використовуєте на цій машині інші облікові записи git без 2FA, ці справжні паролі також зберігатимуться у відкритому тексті.

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


1
це спрацювало для мене і дозволило мені не потрібно вводити un та pw щоразу, коли я взаємодію з git. я використовую вікна з cygwin і ніколи не міг змусити ключі ssh працювати - це робить!
liltitus27,

про останній пункт: ...the credential is NOT your real password, it is a randomly generated string. So it is as secure as using ssh private key.- це зовсім неправда . Ключі SSH можна легко захистити за допомогою парольної фрази з коробки. Рівнина ~./git-credentials- зовсім не захищена!
maxkoryukov

крім того, цей КЛЮЧ API, що зберігається у файлі відкритого тексту, дозволяє: отримувати доступ до API GitHub (залежить від сфери дії, але, мабуть, кожен, хто має apikey, матиме доступ до вихідного коду репо) та виконувати будь-які операції git (push, pull). Іншими словами, такий файл відкритого тексту є приголомшливим подарунком, особливо якщо у вас є доступ до приватних сховищ (можливо, вони стануть загальнодоступними дуже скоро)
maxkoryukov

@maxkoryukov Добре, як щодо того, щоб я переформулював останнє речення як "таке ж безпечне, як використання приватного ключа ssh без парольної фрази"? Тому що вся суть кроку 3 намагається обійти запит на введення пароля (звичайно, якщо ви працюєте на своєму комп’ютері). У такому випадку, якщо комусь вдасться отримати ваші ~ / .git-облікові дані АБО ваш приватний ключ ssh без фрази, наслідком буде те саме. Я погоджуюся з вами, що захищений парольною фразою ключ ssh буде більш безпечним (і менш зручним).
RayLuo

@RayLuo, LGFM;)
maxkoryukov

16

У мене була подібна проблема. Мені довелося змінити URL-адресу, використовувану в команді git, щоб включити своє ім’я користувача.

git push https://YOUR_USERNAME_HERE@github.com/mlbileschi/scala.git

Потім, коли він запитує PW, використовуйте маркер доступу, який ви створили, дотримуючись інструкцій у відповіді Герго Ердосі.


1
це працює для мене, але якщо я намагаюся встановити git remote set-url --push originз тим самим значенням, то git push origin masterвсе одно не вдається.
Данімаль

Також працює для мене після включення мого імені користувача у віддалений шлях, як описано Jester.
ово

Це не спрацювало для мене в командному рядку Windows, але всередині все git-bashпрацювало нормально
Вінсент Танг

У мене ідеально працювало в Ubuntu. Дякую!
Райан Рассел

12

У Linux ви можете автентифікувати свою ідентичність GitHub за допомогою ключа SSH.

1) Створення нового ключа SSH ( джерело )

Відкрити термінал.

Вставте текст нижче, замінюючи вашу електронну адресу GitHub.

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

При цьому створюється новий ключ ssh, використовуючи надану електронну пошту як мітку.


2) Пов’язання ключа з вашим обліковим записом GitHub

Відкрийте термінал і скопіюйте згенерований відкритий ключ

cat ~/.ssh/id_rsa.pub

Має виводити щось як

ssh-rsa AAAAB3NzaC1y ... mKAKw== your_email@example.com

Перейдіть до https://github.com/settings/keys і клацніть New SSH Key, надайте йому назву та скопіюйте відкритий ключ.

введіть тут опис зображення


3) Змінити походження git з https://наssh

Відкрийте термінал cdдо вашого розташування та типу сховища

git remote set-url origin git@github.com:<github username>/<repository name>

1
Правда, але не має відношення до питання. Аутентифікація через httpsіноді корисна, наприклад, коли ви тримаєте вгору за течією, httpsпоки ваша форка перевертається ssh, щоб уникнути випадкового натискання вгору за течією, оскільки httpsзапитатиме пароль і нагадуватиме вам, що ви націлили неправильний репо
stelios

Вам не потрібен Linux, щоб використовувати SSH. Я думаю, що використання SSH - краща відповідь для Windows. Часто використовуваним інструментом для вікон є Pagaent and Putty
Ендрю

3

Це спрацювало для мене:

  • Перейдіть до [your-git-repo] /. Git / config

  • У розділі [remote "origin"]Змінити URLключ з протоколу http на git.

Приклад

Якщо значення urlє https://github.com/ .git змінити йогоgit@github.com:<repo-url>.git


3

Якщо ви вже використовуєте ssh-клавіші, після ввімкнення 2FA це змусить вас читати / писати віддалено за допомогою SSH. Вам насправді не потрібно додавати особисті токени, а продовжувати використовувати існуючу пару ключів SSH.

Просто змініть віддалену URL-адресу з HTTPS на SSH:

git remote set-url origin git@github.com:<github-username>/<repo-name>

0

Це спрацювало для мене після ввімкнення 2FA на Github:

  1. Створіть персональний маркер доступу: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line .
    ПРИМІТКА. Не забудьте вибрати правильні дозволи для маркера.

  2. Виконати:
    git clone https://github.com/username/repo.git
    Ім'я користувача: your_username
    Пароль:your_token

Подальше читання: https://help.github.com/en/github/using-git/which-remote-url-should-i-use


0

Я зіткнувся з цією проблемою на існуючих репо, коли ввімкнув 2FA (двофакторну автентифікацію) для одного з моїх приватних репо. Я зміг вирішити це, виконавши наступні кроки на моєму терміналі ubuntu 19.0: -

  1. Додайте свій ключ ssh до github, щоб вам більше не потрібно було використовувати свій пароль, як зараз ви увімкнули 2FA. Відвідайте сторінку github, щоб знати, як це легко зробити.
  2. Після додавання ключа перейдіть до терміналу та оновіть вихідну URL-адресу

    git remote set-url origin git@github.com:<USERNAME>/<BRANCH-NAME>

Це все. Сподіваюся, це допоможе

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.