2FA 활성화 후 Git 인증 실패


99

방금 2FA를 활성화하고 (다른 변경 사항을 생각할 수 없음) git이 내 사용자 이름과 암호를 요청했습니다. 둘 다 제공했지만 "틀 렸습니다". 여기에서 많은 솔루션을 시도했습니다. Git 푸시에는 사용자 이름과 암호가 필요 하지만 작동하지 않았습니다. 특히 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

답변:


129

액세스 토큰을 생성해야합니다. 설정 페이지 로 이동하여 만들 수 있습니다 .

여기에 이미지 설명 입력

이 액세스 토큰을 명령 줄에서 암호로 사용합니다.


음, 나는 set-url을 https로 설정 한 후 시도했지만 작동하지 않았습니다. 또한 set-url을 ssh로 다시 시도하고 .ssh / known_hosts 항목을 제거했지만 아무 소용이 없습니다.
Max Bileschi 2014 년

질문에 명령 줄 출력을 추가 할 수 있습니까? 실행중인 명령을 포함합니다.
Gergo Erdosi

출력이 추가되었습니다
Max Bileschi 2014 년

복제를 시작하고 새 액세스 토큰을 입력해야하는 이상한 문제가있었습니다. 이 후 (복제가 완료 될 때까지 기다리지 않고) 실행하려고했던 원래 디렉터리에 새 액세스 토큰을 제공 할 수있었습니다 git pull. 아마도 지역 문제 일 수 있지만 이것은 누군가에게 도움이 될 수 있습니다.
sg

The requested URL returned error: 403https를 통한 푸시를 위해 암호로 토큰을 사용할 때 얻습니다
stelios

39

종단 간 솔루션에는 3 단계가 필요합니다.

  1. Gergo Erdosi에 대한 명성. 그의 대답은 대체로 옳으며 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 개인 키 를 사용 하는 것만 큼 ​​안전 합니다. 주의 :이 컴퓨터에서 2FA없이 다른 git 계정을 사용하는 경우 실제 비밀번호도 일반 텍스트로 저장됩니다.

추신 : 또는 암호로 보호 된 ssh 개인 키를 사용하여 ssh 기반 로그인을 사용하도록 선택할 수 있습니다. 이는 더 안전하고 덜 편리하지만이 답변의 범위를 벗어납니다.


1
이것은 나를 위해 일했으며 git과 상호 작용할 때마다 un 및 pw를 입력 할 필요가 없었습니다. 나는 cygwin과 함께 창을 사용하고 ssh 키를 작동시킬 수 없었습니다.
liltitus27

about last para : ...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 2017

: 또한, 일반 텍스트 파일에 저장이 API 키는 할 수 있습니다 액세스 GitHub의의 API (범위에 따라 다르지만 아마 apiKey에있는 모든 사람들이 REPO의 소스 코드에 액세스 할 수 있습니다) 및 모든 수행 자식 작업 (푸시 풀을). 즉, 같은 일반 텍스트를 사용하면 개인 저장소에 대한 액세스가있는 경우 파일은 (아마도를, 그들은 곧 공개 될 것입니다), 특히, 멋진 선물
maxkoryukov

@maxkoryukov 좋아요. 마지막 문장을 "패스 프레이즈가없는 SSH 개인 키를 사용하는 것만 큼 안전하다"고 다시 표현하는 것은 어떻습니까? 3 단계의 요점은 암호를 묻는 메시지를 무시하는 것입니다 (물론 자신의 컴퓨터에서 작업한다고 가정). 이 경우 누군가가 ~ / .git-credentials 또는 passphrase-less ssh 개인 키를 확보하면 결과는 동일합니다. 암호로 보호 된 ssh 키가 더 안전하고 덜 편리하다는 데 동의합니다.
RayLuo

@RayLuo, LGFM;)
maxkoryukov 2017-04-15

16

비슷한 문제가있었습니다. 내 사용자 이름을 포함하도록 git 명령에 사용 된 URL을 변경해야했습니다.

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

그런 다음 PW를 요청할 때 Gergo Erdosi의 답변의 지침에 따라 만든 액세스 토큰을 사용하십시오.


1
이것은 나를 위해 작동하지만 git remote set-url --push origin동일한 값 으로 설정하려고 git push origin master하면 여전히 실패합니다.
Danimal

Jester가 설명한대로 원격 경로에 내 사용자 이름을 포함시킨 후에도 나를 위해 작동합니다.
ovo

창에서 나를 위해이하지 않았다 작업은 명령 프롬프트하지만 내부 git-bash불구하고 벌금을 일
빈센트 탕

Ubuntu에서 나를 위해 완벽하게 작동했습니다. 감사!
Ryan Russell

12

Linux에서는 SSH 키를 사용하여 GitHub ID를 인증 할 수 있습니다.

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) 변경에서 기원 이눔 https://ssh

cd저장소 위치에 터미널을 열고 입력하십시오.

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

1
사실이지만 질문과 관련이 없습니다. Authenticated via https는 경우에 따라 유용합니다. 예를 들어 https포크를 넘기는 동안 업스트림을 유지 하여 ssh실수로 업스트림으로 푸시하는 것을 방지 할 수 있습니다. 왜냐하면 https암호를 묻고 잘못된 저장소를 대상으로했음을 상기
시켜줄

SSH를 사용하기 위해 리눅스가 필요하지 않습니다. SSH를 사용하는 것이 Windows에서도 더 나은 대답이라고 생각합니다. Windows에서 일반적으로 사용되는 도구는 Pagaent 및 Putty입니다
Andrew

3

이것은 나를 위해 일했습니다.

  • [your-git-repo] /. git / config로 이동합니다.

  • 에서 [remote "origin"]변경 URL자식에 대한 프로토콜 HTTP에서 키를 누릅니다.

의 값 urlhttps://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

이것은 Github에서 2FA를 활성화 한 후 저에게 효과적이었습니다.

  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 (2 단계 인증)를 활성화 할 때 기존 저장소에서이 문제에 직면했습니다. 내 우분투 19.0 터미널에서 아래 단계에 따라 해결할 수있었습니다.

  1. 이제 2FA를 활성화 했으므로 ssh 키를 github에 추가 하면 비밀번호를 다시 사용할 필요가 없습니다. 쉽게하는 방법을 알아 보려면 github 페이지방문하십시오 .
  2. 키가 추가되면 터미널로 이동하여 원본 URL을 업데이트하십시오.

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

그게 다야.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.