Ошибка аутентификации Git после включения 2FA

99

Я только что включил 2FA (не могу вспомнить никаких других изменений, которые я сделал), и git попросил мое имя пользователя и пароль. Я предоставил и то, и другое, но они были «неправильными». Я пробовал здесь множество решений: Git push требует имени пользователя и пароля, но это не сработало. В частности, при переходе с https на ssh ключ ssh дает

В разрешении отказано (публичный ключ). фатальный: не удалось прочитать из удаленного репозитория.

$ 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
«В разрешении отказано (открытый ключ). Фатальный: не удалось прочитать из удаленного репозитория». это отдельная проблема, которая может быть решена путем настройки SSH-ключа для вашей учетной записи: help.github.com/articles/…
Ajedi32
1
часто это не проблема 2FA, а вместо этого решается путем перехода с https на git
SCBuergel.eth

Ответы:

131

Вам необходимо сгенерировать токен доступа. Вы можете создать его, перейдя на страницу настроек .

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

Используйте этот токен доступа в качестве пароля в командной строке.

Герго Эрдози
источник
хм, я попробовал это после установки URL-адреса на https, и это не сработало. Я также попытался вернуть URL-адрес в ssh и удалить запись .ssh / known_hosts, но безрезультатно.
Макс Билещи
Можете ли вы добавить к своему вопросу вывод командной строки? Включая команды, которые вы выполняете.
Герго Эрдози
Выход был добавлен
Max Bileschi
У меня была странная проблема, когда мне пришлось начать клонирование и ввести новый токен доступа. После этого (даже не дожидаясь завершения клона) я смог передать свой новый токен доступа в исходный каталог, в котором я пытался запустить git pull. Вероятно, это локальная проблема, но это может кому-то помочь.
sg
Я получаю, The requested URL returned error: 403когда использую токен в качестве пароля, для нажатия на https
stelios
39

Комплексное решение состоит из 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-credentials в виде открытого текста с использованием формата https://user:PlaintextPassword@example.com.

    Хранение паролей в открытом виде обычно рассматривается как угроза безопасности. Но в этом случае 2FA учетные данные НЕ являются вашим настоящим паролем, это случайно сгенерированная строка. Это так же безопасно, как использование закрытого ключа ssh и закрытого ключа ssh без парольной фразы. ПРЕДОСТЕРЕЖЕНИЕ: имейте в виду, что если вы также используете другую учетную запись (-и) git без 2FA на этом компьютере, эти реальные пароли также будут сохранены в виде открытого текста.

PS: В качестве альтернативы вы можете использовать вход на основе ssh, используя закрытый ключ ssh, защищенный парольной фразой, который был бы более безопасным и менее удобным, но это выходит за рамки этого ответа.

RayLuo
источник
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-credentials ИЛИ секретным ключом 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все равно не удастся.
Danimal
Также работает для меня после включения моего имени пользователя в удаленный путь, как описано Jester.
ovo
У меня это не сработало в командной строке 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. Обычно используемый инструмент для Windows - Pagaent и Putty
Эндрю,
3

Это сработало для меня:

  • Перейдите в [your-git-repo] /. Git / config

  • В разделе « [remote "origin"]Измените URLключ с протокола http на git».

пример

Если значение urlявляется https://github.com/ .git изменить егоgit@github.com:<repo-url>.git

imsinu9
источник
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>

Надеюсь, это поможет

Milind
источник