กดไปที่ GitHub โดยไม่ใช้รหัสผ่านโดยใช้ ssh-key


215

ฉันสร้างคู่คีย์ SSH โดยไม่มีรหัสผ่านและเพิ่มคีย์สาธารณะใน GitHub

การเชื่อมต่อกับ

user@dev:/var/www/project# ssh -T git@github.com
Hi User! You've successfully authenticated, but GitHub does not provide shell access.

ประสบความสำเร็จและเมื่อฉันเปลี่ยนชื่อคีย์มันล้มเหลว

แต่เมื่อฉันต้องการที่จะผลักดันการเปลี่ยนแปลงของฉันมันยังคงถามฉันสำหรับชื่อผู้ใช้และรหัสผ่านรวม

มีวิธีการผลักดันโดยไม่มีรหัสผ่านหรือไม่?


9
ตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้https://github...ในรีโมท พวกเขาควรทำตามgit@github...รูปแบบ
cjc343

คำตอบ:


421

หากมีการขอชื่อผู้ใช้และรหัสผ่านรีโมตต้นทางของคุณจะชี้ไปที่ HTTPS URL แทนที่จะเป็น SSH URL

เปลี่ยนเป็น ssh

ตัวอย่างเช่นโครงการ GitHub เช่น Git จะมี HTTPS URL:

https://github.com/<Username>/<Project>.git

และหนึ่ง SSH:

git@github.com:<Username>/<Project>.git

คุณทำได้:

git remote set-url origin git@github.com:<Username>/<Project>.git

เพื่อเปลี่ยน URL


4
วิธีนี้แก้ไขได้ แต่ฉันถามตัวเองอยู่เรื่อย ๆ ว่าทำไม Github จึงแนะนำให้คุณชี้ที่สิ้นสุดระยะไกลของที่เก็บใหม่ไปยัง http URL โดยค่าเริ่มต้น ฉันเพิ่งสร้างที่เก็บตั้งแต่เริ่มต้นและฉันก็ได้รับตัวเลือกสำหรับการตั้งค่า URL ระยะไกล https ไม่ใช่คอมไพล์
Preslav Rachev

2
ต่อไปนี้เป็นคำสั่งเชลล์แบบซับเดียวที่จะเปลี่ยน URL url ของคุณเป็น git ที่เหมาะสมโดยอัตโนมัติ (ใช้ได้กับ gitub URL เท่านั้น):git remote set-url origin $(git remote show origin | grep "Fetch URL" | sed 's/ *Fetch URL: //' | sed 's/https:\/\/github.com\//git@github.com:/')
Christopher Shroba


10

ในกรณีที่คุณใช้ URL ของ SSH แต่ก็ยังถูกถามถึงชื่อผู้ใช้และรหัสผ่านเมื่อกด git:

git remote set-url origin git@github.com:<Username>/<Project>.git

คุณควรลองแก้ไขปัญหาด้วย:

ssh -vT git@github.com

ด้านล่างเป็นชิ้นส่วนของเอาต์พุตตัวอย่าง:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_dsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ecdsa
debug1: Trying private key: /c/Users/Yuci/.ssh/id_ed25519
debug1: No more authentication methods to try.
Permission denied (publickey).

จริง ๆ แล้วฉันได้เพิ่มคีย์สาธารณะใน GitHub มาก่อนและฉันยังมีรหัสส่วนตัวในเครื่องด้วย /c/Users/Yuci/.ssh/github_rsaอย่างไรก็ตามคีย์ส่วนตัวของฉันคือชื่อเรียกที่แตกต่างกัน

จากตัวอย่างผลลัพธ์ Git พยายาม/c/Users/Yuci/.ssh/id_rsaซึ่งฉันไม่มี ดังนั้นฉันสามารถคัดลอกgithub_rsaไปที่id_rsaในไดเรกทอรีเดียวกัน

cp /c/Users/Yuci/.ssh/github_rsa /c/Users/Yuci/.ssh/id_rsa

ตอนนี้เมื่อฉันวิ่งssh -vT git@github.comอีกครั้งฉันมี:

...
debug1: Trying private key: /c/Users/Yuci/.ssh/id_rsa
debug1: Authentication succeeded (publickey).
...
Hi <my username>! You've successfully authenticated, but GitHub does not provide shell access.
...

และตอนนี้ฉันสามารถกดไปที่ GitHub ได้โดยไม่ต้องขอชื่อผู้ใช้และรหัสผ่าน :-)


5

คุณต้องใช้SSHรุ่นไม่HTTPS เมื่อคุณโคลนจากพื้นที่เก็บข้อมูลที่คัดลอกลิงก์กับSSHรุ่นเพราะ SSH ง่ายต่อการใช้งานและการแก้ปัญหาทั้งหมดที่มีการเข้าถึง คุณสามารถตั้งค่าการเข้าถึง SSH ทุกครั้งที่คุณป้อนเข้าสู่บัญชีของคุณ (เช่นการผลัก, การดึง, การโคลนนิ่งและอื่น ๆ ... )

นี่คือลิงค์ซึ่งบอกว่าทำไมเราถึงต้องการ SSH และวิธีใช้: ขั้นตอน

Git สร้างคีย์ SSH


0

ตามปกติสร้างคีย์ SSH และวางคีย์สาธารณะใน GitHub เพิ่มไพรเวตคีย์ไปยัง ssh-agent (ฉันถือว่านี่คือสิ่งที่คุณทำ)

เพื่อตรวจสอบทุกอย่างถูกต้องใช้ ssh -T git@github.com

ถัดไปอย่าลืมแก้ไขจุดรีโมทดังต่อไปนี้:

git remote set-url origin git@github.com:username/your-repository.git

-4

ใช้บรรทัดคำสั่ง:

ป้อนls -al ~/.sshเพื่อดูว่ามีคีย์ SSH ที่มีอยู่หรือไม่

ในเทอร์มินัลจะแสดง: ไม่มีไดเรกทอรีอยู่

จากนั้นสร้างคีย์ SSH ใหม่

ขั้นตอนที่ 1.

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

ขั้นตอนที่ 2.

Enter a file in which to save the key (/Users/you/.ssh/id_rsa): <here is file name and enter the key>

ขั้นตอนที่ 3

Enter passphrase (empty for no passphrase): [Type a password]

Enter same passphrase again: [Type password again]

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