สมมติว่าalice
เป็นผู้ใช้ github.com ที่มีที่เก็บส่วนตัว 2 แห่งขึ้นrepoN
ไป สำหรับตัวอย่างนี้เราจะทำงานกับที่เก็บเพียงสองชื่อrepo1
และrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
คุณต้องดึงจากที่เก็บเหล่านี้โดยไม่ต้องป้อนรหัสผ่านที่อาจอยู่บนเซิร์ฟเวอร์หรือบนเซิร์ฟเวอร์หลายเครื่อง คุณต้องการทำgit pull origin master
ตัวอย่างและคุณต้องการให้สิ่งนี้เกิดขึ้นโดยไม่ต้องขอรหัสผ่าน
คุณไม่ชอบการจัดการกับ ssh-agent คุณได้ค้นพบ (หรือคุณกำลังค้นพบในขณะนี้) เกี่ยวกับ~/.ssh/config
ไฟล์ที่ทำให้ไคลเอนต์ ssh ของคุณรู้ว่าคีย์ส่วนตัวใดที่จะใช้ขึ้นอยู่กับชื่อโฮสต์และชื่อผู้ใช้ นี้:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
ดังนั้นคุณจึงไปข้างหน้าและสร้าง(alice_github.id_rsa, alice_github.id_rsa.pub)
keypair ของคุณจากนั้นคุณก็ไปที่.git/config
ไฟล์ของที่เก็บของคุณและคุณแก้ไข url ของรีโมตของคุณorigin
ให้เป็นแบบนี้:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
และในที่สุดคุณก็ไปที่ที่เก็บ Settings > Deploy keys
ส่วนและเพิ่มเนื้อหาของalice_github.id_rsa.pub
ณ จุดนี้คุณสามารถทำของคุณ git pull origin master
โดยไม่ต้องป้อนรหัสผ่านโดยไม่มีปัญหา
แต่ที่เก็บอันที่สองล่ะ
ดังนั้นสัญชาตญาณของคุณจะต้องคว้ากุญแจนั้นและเพิ่มเข้าไป repo2
กุญแจของการปรับใช้ แต่ github.com จะผิดพลาดและบอกคุณว่ากุญแจนั้นถูกใช้ไปแล้ว
ตอนนี้คุณไปและสร้างรหัสอื่น (โดยssh-keygen -t rsa -C "alice@alice.com"
ไม่ต้องใช้รหัสผ่าน) และเพื่อให้ไม่เป็นระเบียบคุณจะต้องตั้งชื่อคีย์ของคุณดังนี้:
repo1
keypair: (repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
repo2
keypair: (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)
ตอนนี้คุณจะวางกุญแจสาธารณะใหม่ในrepo2
การกำหนดค่าคีย์การปรับใช้ที่ github.com แต่ตอนนี้คุณมีปัญหา ssh ที่จะจัดการกับ
ssh จะบอกได้อย่างไรว่าจะใช้คีย์ใดถ้าที่เก็บโฮสต์อยู่ในgithub.com
โดเมนเดียวกัน
.ssh/config
ไฟล์ของคุณชี้ไปที่github.com
และไม่ทราบว่าจะใช้คีย์ใดเมื่อถึงเวลาที่ต้องทำการดึง
ดังนั้นฉันจึงพบเคล็ดลับกับ github.com คุณสามารถบอกไคลเอ็นต์ ssh ของคุณว่าที่เก็บข้อมูลแต่ละแห่งอยู่ในโดเมนย่อย github.com ที่แตกต่างกันในกรณีเหล่านี้พวกเขาจะrepo1.github.com
และrepo2.github.com
ดังนั้นสิ่งแรกคือการแก้ไข.git/config
ไฟล์ใน repo clones ของคุณดังนั้นมันจะมีหน้าตาแบบนี้แทน:
สำหรับ repo1
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
สำหรับ repo2
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
จากนั้นใน.ssh/config
ไฟล์ของคุณตอนนี้คุณจะสามารถป้อนการกำหนดค่าสำหรับแต่ละโดเมนย่อยได้ :)
Host repo1.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
IdentitiesOnly yes
Host repo2.github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
IdentitiesOnly yes
ตอนนี้คุณสามารถที่จะgit pull origin master
ไม่ต้องป้อนรหัสผ่านใด ๆ จากที่เก็บทั้งสอง
หากคุณมีหลายเครื่องคุณสามารถคัดลอกคีย์ไปยังแต่ละเครื่องและนำมาใช้ซ้ำได้ แต่ฉันขอแนะนำให้ใช้เลกทำงานเพื่อสร้าง 1 คีย์ต่อเครื่องและ repo คุณจะมีปุ่มที่จะจัดการได้มากขึ้น แต่คุณจะมีความเสี่ยงน้อยลงหากมีใครถูกโจมตี