การตรวจสอบสิทธิ์ Git ล้มเหลวหลังจากเปิดใช้งาน 2FA


105

ฉันเพิ่งเปิดใช้งาน 2FA (ฉันไม่สามารถนึกถึงการเปลี่ยนแปลงอื่น ๆ ที่ฉันทำ) และคอมไพล์ขอชื่อผู้ใช้และรหัสผ่านของฉัน ฉันให้ทั้งสองอย่าง แต่ "ผิด" ฉันลองใช้วิธีแก้ปัญหามากมายที่นี่: 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

คำตอบ:


141

คุณต้องสร้างโทเค็นการเข้าถึง คุณสามารถสร้างได้โดยไปที่คุณหน้าการตั้งค่า

ป้อนคำอธิบายภาพที่นี่

ใช้โทเค็นการเข้าถึงนี้เป็นรหัสผ่านของคุณในบรรทัดคำสั่ง


อืมฉันลองหลังจากตั้งค่า url เป็น https แล้ว แต่ก็ไม่ได้ผล ฉันยังลอง set-url กลับไปที่ ssh และลบรายการ. ssh / known_hosts แต่ก็ไม่มีประโยชน์
Max Bileschi

คุณสามารถเพิ่มเอาต์พุตบรรทัดคำสั่งให้กับคำถามของคุณได้หรือไม่? รวมถึงคำสั่งที่คุณกำลังดำเนินการ
Gergo Erdosi

เพิ่มผลผลิต
Max Bileschi

ฉันมีปัญหาแปลก ๆ ที่ฉันต้องเริ่มต้นโคลนและป้อนโทเค็นการเข้าถึงใหม่ของฉัน หลังจากนี้ (โดยไม่ต้องรอให้โคลนเสร็จสิ้น) ฉันสามารถให้โทเค็นการเข้าถึงใหม่ไปยังไดเร็กทอรีเดิมของฉันที่ฉันพยายามเรียกใช้git pullอาจเป็นปัญหาในพื้นที่ แต่สิ่งนี้อาจช่วยใครบางคนได้
sg

ฉันได้รับThe requested URL returned error: 403เมื่อฉันใช้โทเค็นสำหรับรหัสผ่านสำหรับการกดผ่าน https
stelios

42

โซลูชัน end-to-end ใช้ 3 ขั้นตอน

  1. ความรุ่งโรจน์ต่อ Gergo Erdosi คำตอบของเขานั้นถูกต้องมากเพียงแค่ Github เปลี่ยนหน้าการตั้งค่านั้น เป็นของสาย 2016 คุณจำเป็นต้องสร้างการเข้าถึง tokenจากการเข้าถึงส่วนตัวโทเค็นหน้า

    ป้อนคำอธิบายภาพที่นี่

    ใช้โทเค็นการเข้าถึงนี้เป็นรหัสผ่านของคุณในบรรทัดคำสั่ง

  2. คุณสามารถคงชื่อผู้ใช้ของคุณไว้ได้โดยรวมไว้ใน url ระยะไกลของโปรเจ็กต์ วิธีหนึ่งที่ทำได้คือแก้ไขของคุณ.git/configเพื่อแก้ไขurlบรรทัดให้เป็นรูปแบบต่อไปนี้:

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

  3. คุณสามารถยืนยันรหัสผ่านของคุณได้โดยเรียกใช้ครั้งเดียวเท่านั้น:

    $ git config credential.helper store

    แล้วคอมไพล์รหัสผ่านของคุณในอนาคต (s) จะถูกเก็บไว้ใน ~ / .git-ข้อมูลประจำตัวใน plaintext https://user:PlaintextPassword@example.comโดยใช้รูปแบบ

    โดยปกติการจัดเก็บรหัสผ่านเป็นข้อความธรรมดาถือเป็นความเสี่ยงด้านความปลอดภัย แต่ในกรณี 2FA นี้ข้อมูลประจำตัวไม่ใช่รหัสผ่านจริงของคุณเป็นสตริงที่สร้างขึ้นแบบสุ่ม ดังนั้นจึงปลอดภัยพอ ๆ กับการใช้คีย์ส่วนตัว ssh ซึ่งเป็นคีย์ส่วนตัวที่ไม่มีข้อความรหัสผ่าน CAVEAT: โปรดทราบว่าหากคุณบังเอิญใช้บัญชี git อื่นที่ไม่มี 2FA ในเครื่องนี้รหัสผ่านจริงเหล่านั้นจะถูกเก็บไว้ในข้อความธรรมดาด้วย

ป.ล. : หรือคุณสามารถเลือกใช้การเข้าสู่ระบบโดยใช้ ssh โดยใช้รหัสส่วนตัว ssh ที่ป้องกันด้วยรหัสผ่านซึ่งจะปลอดภัยกว่าและสะดวกน้อยกว่า แต่อยู่นอกขอบเขตของคำตอบนี้


1
สิ่งนี้ใช้ได้ผลสำหรับฉันและทำให้ฉันไม่ต้องพิมพ์ un และ pw ทุกครั้งที่ฉันโต้ตอบกับคอมไพล์ ฉันใช้ windows กับ 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 นี้ที่จัดเก็บในไฟล์ข้อความธรรมดายังอนุญาตให้เข้าถึง GitHub API (ขึ้นอยู่กับขอบเขต แต่อาจเป็นไปได้ว่าทุกคนที่มี apikey จะสามารถเข้าถึงซอร์สโค้ดของ repo ได้) และดำเนินการคอมไพล์ (push, pull) กล่าวอีกนัยหนึ่งไฟล์ข้อความธรรมดาดังกล่าวเป็นของขวัญที่ยอดเยี่ยมโดยเฉพาะอย่างยิ่งหากคุณสามารถเข้าถึงที่เก็บส่วนตัวได้ (อาจเป็นที่เก็บข้อมูลสาธารณะในไม่ช้า)
maxkoryukov

@maxkoryukov ตกลงฉันจะเปลี่ยนประโยคสุดท้ายเป็น "as secure as using a passphrase-less ssh private key" ได้อย่างไร เนื่องจากจุดรวมของขั้นตอนที่ 3 พยายามข้ามพร้อมท์สำหรับรหัสผ่าน (แน่นอนว่าคุณกำลังทำงานบนคอมพิวเตอร์ของคุณเอง) ในกรณีเช่นนี้หากมีคนสามารถระงับการใช้ ~ / .git-credentials ของคุณหรือคีย์ส่วนตัว ssh ที่ไม่ใช้ข้อความรหัสผ่านของคุณผลลัพธ์ก็จะเหมือนกัน ฉันเห็นด้วยกับคุณว่าคีย์ ssh ที่ป้องกันด้วยข้อความจะปลอดภัยกว่า (และสะดวกน้อยกว่า)
RayLuo

@RayLuo, LGFM;)
maxkoryukov

18

ฉันมีปัญหาที่คล้ายกัน ฉันต้องแก้ไข url ที่ใช้ในคำสั่ง git เพื่อรวมชื่อผู้ใช้ของฉัน

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

1
ยังใช้งานได้สำหรับฉันหลังจากรวมชื่อผู้ใช้ของฉันในเส้นทางระยะไกลตามที่อธิบายโดย Jester
ovo

สิ่งนี้ไม่ได้ผลสำหรับฉันในพรอมต์คำสั่งของ windows แต่ข้างในgit-bashทำงานได้ดี
Vincent Tang

1
ทำงานได้อย่างสมบูรณ์แบบสำหรับฉันใน Ubuntu ขอบคุณ!
Ryan Russell

ยังคงใช้งานได้หากคุณใช้โทเค็นโดยตรงที่ https: // <token> @github ...
Patrick Mutuku

14

คุณสามารถตั้งค่าคีย์ SSH (ทั้งบน Linux และ Windows)

💡หมายเหตุสำหรับผู้ใช้ Windows
ตรวจสอบให้แน่ใจว่าHOMEมีการกำหนดตัวแปรสภาพแวดล้อมและตั้งค่าบนไดเร็กทอรีของผู้ใช้ของคุณ
เช่นC:\Users\jossef( เรียนรู้เพิ่มเติม )


1) การสร้างคีย์ SSH ใหม่ (ที่มา )

เปิด Terminal / cmd แล้ววางข้อความด้านล่าง (แทนที่ด้วยที่อยู่อีเมล GitHub ของคุณ)

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

2) เชื่อมโยงคีย์สาธารณะกับบัญชี GitHub ของคุณ

  • บน Linux / macOS ให้รันในเทอร์มินัล:

    cat ~/.ssh/id_rsa.pub
    
  • บน Windows ให้เรียกใช้ใน cmd:

    type %HOME%\.ssh\id_rsa.pub
    

สิ่งนี้จะส่งออกคีย์สาธารณะ:

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

ไปที่https://github.com/settings/keys

  • คลิก New SSH Key
  • ตั้งชื่อเรื่อง
  • คัดลอกวางคีย์สาธารณะจากเอาต์พุตคำสั่งก่อนหน้า

ป้อนคำอธิบายภาพที่นี่


3) เปลี่ยนจุดเริ่มต้นของคอมไพล์จากhttps://เป็นssh

เปิดเทอร์มินัล / cmd และcdไปยังไดเร็กทอรีที่เก็บโคลนของคุณแล้วรัน:

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

1
จริง แต่ไม่เกี่ยวข้องกับคำถาม httpsบางครั้งการพิสูจน์ตัวตนผ่านก็มีประโยชน์เช่นเมื่ออัปสตรีมไว้httpsในขณะที่มีส้อมของคุณsshเพื่อที่คุณจะได้หลีกเลี่ยงการกดไปที่ต้นน้ำโดยไม่ได้ตั้งใจเนื่องจากhttpsจะขอรหัสผ่านและเตือนคุณว่าคุณกำหนดเป้าหมาย repo ที่ไม่ถูกต้อง
stelios

4

หากคุณใช้คีย์ ssh อยู่แล้วหลังจากเปิดใช้งาน 2FA มันจะบังคับให้คุณอ่าน / เขียนรีโมตด้วย SSH คุณไม่จำเป็นต้องเพิ่มโทเค็นส่วนบุคคล แต่ใช้คู่คีย์ SSH ที่มีอยู่ต่อไป

เพียงแค่เปลี่ยน url ระยะไกลของคุณจาก HTTPS เป็น SSH:

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

3

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

  • ไปที่ [your-git-repo] /. git / config

  • ภายใต้[remote "origin"]เปลี่ยนURLคีย์จากโปรโตคอล http เป็นคอมไพล์

ตัวอย่าง

หากค่าurlเป็นhttps://github.com/ .git ให้เปลี่ยนเป็นgit@github.com:<repo-url>.git


0

สิ่งนี้ใช้ได้ผลสำหรับฉันหลังจากเปิดใช้งาน 2FA บน Github:

  1. สร้างการเข้าถึงส่วนบุคคล Token: https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line
    หมายเหตุ: อย่าลืมเลือกสิทธิ์ที่ถูกต้องสำหรับโทเค็น

  2. Run:
    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

ฉันประสบปัญหานี้ใน repo ที่มีอยู่เมื่อฉันเปิดใช้งาน 2FA (การตรวจสอบสิทธิ์สองปัจจัย) สำหรับหนึ่งใน repos ส่วนตัวของฉัน ฉันสามารถแก้ไขได้โดยทำตามขั้นตอนด้านล่างบนเทอร์มินัล ubuntu 19.0 ของฉัน: -

  1. เพิ่มคีย์ ssh ของคุณในgithubเพื่อที่คุณจะได้ไม่ต้องใช้รหัสผ่านของคุณอีกเพราะตอนนี้คุณได้เปิดใช้งาน 2FA แล้ว ไปที่หน้า githubเพื่อทราบวิธีการทำอย่างง่ายดาย
  2. เมื่อเพิ่มคีย์แล้วให้ไปที่เทอร์มินัลของคุณและอัปเดต URL ต้นทาง

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

นั่นมันหวังว่ามันจะช่วยได้


0

ฉันพบปัญหานี้เมื่อเปลี่ยนไปใช้แล็ปท็อปเครื่องเก่า ปัญหาจริงๆคือฉันใช้ git เวอร์ชันเก่า เมื่อฉันอัปเดต git เป็นเวอร์ชันล่าสุดด้วยตัวจัดการข้อมูลรับรองข้ามแพลตฟอร์มใหม่แล้วก็สามารถลงชื่อฉันด้วย 2FA ได้อย่างสมบูรณ์แบบ (ดูเหมือนว่าจะสร้าง PAT ให้คุณโดยอัตโนมัติ)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.