สมมติว่า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 คุณจะมีปุ่มที่จะจัดการได้มากขึ้น แต่คุณจะมีความเสี่ยงน้อยลงหากมีใครถูกโจมตี