ฉันรู้ว่าฉันตอบเรื่องนี้ช้ามากและแม้แต่ StackOverflow ก็ยืนยันว่าฉันต้องการตอบจริงๆ ฉันตอบเพราะไม่มีใครอธิบายถึงปัญหาที่เกิดขึ้นจริงจึงอยากแบ่งปันเหมือนกัน
พื้นฐาน
ก่อนอื่นต้องทำความเข้าใจก่อนว่ารีโมทที่นี่คืออะไร ระยะไกลคือ GitLab และระบบของคุณเป็นแบบโลคัลดังนั้นเมื่อเราพูดถึงรีโมตorigin
URL ใดก็ตามที่ตั้งค่าไว้ในgit remote -v
เอาต์พุตของคุณคือ URL ระยะไกลของคุณ
โปรโตคอล
โดยทั่วไป Git clone / push / pull จะทำงานบนโปรโตคอลสองโปรโตคอลที่แตกต่างกันโดยส่วนใหญ่ (มีอื่น ๆ ด้วย) -
- โปรโตคอล HTTP
- โปรโตคอล SSH
เมื่อคุณโคลน repo (หรือเปลี่ยน URL ระยะไกล) และใช้ HTTPs URL เช่นhttps://gitlab.com/wizpanda/backend-app.gitจะใช้โปรโตคอลแรกคือโปรโตคอล HTTP
แม้ว่าคุณจะโคลน repo (หรือเปลี่ยน URL ระยะไกล) และใช้ URL เช่นgit@gitlab.com:wizpanda/backend-app.git
นั้นก็จะใช้โปรโตคอล SSH
โปรโตคอล HTTP
ในโปรโตคอลนี้ทุกการดำเนินการระยะไกลเช่นโคลน push & pull ใช้การตรวจสอบความถูกต้องง่ายๆเช่นชื่อผู้ใช้และรหัสผ่านของรีโมตของคุณ (GitLab ในกรณีนี้) ซึ่งหมายความว่าสำหรับการดำเนินการทุกครั้งคุณต้องพิมพ์ชื่อผู้ใช้และรหัสผ่านซึ่งอาจยุ่งยาก .
ดังนั้นเมื่อคุณผลัก / ดึง / โคลน GitLab / GitHub จะตรวจสอบสิทธิ์คุณด้วยชื่อผู้ใช้และรหัสผ่านของคุณและจะช่วยให้คุณดำเนินการได้
หากคุณต้องการที่จะลองนี้คุณสามารถสลับไปใช้ HTTP URL git remote set-url origin <http-git-url>
โดยใช้คำสั่ง
เพื่อหลีกเลี่ยงกรณีดังกล่าวคุณสามารถใช้โปรโตคอล SSH
SSH โปรโตคอล
การเชื่อมต่อ SSH แบบธรรมดาใช้งานได้กับคู่คีย์สาธารณะและคีย์ส่วนตัว ดังนั้นในกรณีของคุณ GitLab ไม่สามารถรับรองความถูกต้องของคุณได้เนื่องจากคุณใช้ SSH URL เพื่อสื่อสาร ตอนนี้ GitLab ต้องรู้จักคุณไม่ทางใดก็ทางหนึ่ง สำหรับสิ่งนั้นคุณต้องสร้างคู่คีย์สาธารณะและส่วนตัวและให้คีย์สาธารณะแก่ GitLab
ตอนนี้เมื่อคุณดัน / ดึง / โคลนด้วย GitLab GIT (SSH ภายใน) จะเสนอคีย์ส่วนตัวของคุณให้กับ GitLab ตามค่าเริ่มต้นและยืนยันตัวตนของคุณจากนั้น GitLab จะอนุญาตให้คุณดำเนินการได้
ดังนั้นฉันจะไม่ทำซ้ำขั้นตอนที่มูฮัมหมัดมอบให้แล้วฉันจะทำซ้ำตามทฤษฎี
- สร้างคู่คีย์ `ssh-keygen -t rsa -b 2048 -C" My Common SSH Key "
- คู่คีย์ที่สร้างขึ้นจะเป็นค่าเริ่มต้นใน
~/.ssh
ชื่อid_rsa.pub
(คีย์สาธารณะ) & id_rsa
(คีย์ส่วนตัว)
- คุณจะจัดเก็บคีย์สาธารณะไว้ในบัญชี GitLab ของคุณ (สามารถใช้คีย์เดียวกันในหลายเซิร์ฟเวอร์ / บัญชีใดก็ได้)
- เมื่อคุณโคลน / ดัน / ดึง GIT จะเสนอคีย์ส่วนตัวของคุณ
- GitLab จับคู่คีย์ส่วนตัวกับคีย์สาธารณะของคุณและช่วยให้คุณดำเนินการได้
เคล็ดลับ
คุณควรสร้างคีย์ rsa ที่แข็งแกร่งโดยมีอย่างน้อย 2048 ไบต์ ssh-keygen -t rsa -b 2048
ดังนั้นคำสั่งที่สามารถ
https://gitlab.com/help/ssh/README#generating-a-new-ssh-key-pair
ความคิดทั่วไป
ทั้งสองแนวทางมีข้อดีข้อเสีย หลังจากพิมพ์ข้อความด้านบนแล้วฉันก็ไปค้นหาเพิ่มเติมเกี่ยวกับเรื่องนี้เพราะฉันไม่เคยอ่านอะไรเกี่ยวกับเรื่องนี้
ฉันพบเอกสารอย่างเป็นทางการนี้https://git-scm.com/book/en/v2/Git-on-the-Server-The-Protocolsซึ่งบอกข้อมูลเพิ่มเติมเกี่ยวกับเรื่องนี้ ประเด็นของฉันคือเมื่ออ่านข้อผิดพลาดและให้ความคิดเกี่ยวกับข้อผิดพลาดคุณสามารถสร้างทฤษฎีหรือความเข้าใจของคุณเองจากนั้นสามารถจับคู่กับผลลัพธ์ของ Google เพื่อแก้ไขปัญหาได้ :)
ssh -vvvv git@gitlab.com
เพื่อดูว่ามันหยิบคีย์ SSH หรือไม่