วิธีการใช้หลายคีย์ ssh กับบัญชีและโฮสต์ที่แตกต่างกัน


21

ฉันมีหลายคีย์ ssh และฉันยังมีบัญชีใน bitbucket และ Github เมื่อไหร่ที่ฉันใช้ pull มันทำให้ฉันเกิดข้อผิดพลาด

:/var/www/proj$ git pull origin master
conq: repository access denied.
fatal: The remote end hung up unexpectedly

หรือถ้าฉัน ssh เว็บไซต์ bitbucket มันให้ข้อผิดพลาดกุญแจสาธารณะตูดปฏิเสธ

:~$ ssh git@bitbucket.org
Permission denied (publickey).

ฉันจะแก้ไขปัญหานี้ได้อย่างไรและใช้คีย์ที่แตกต่างกับบัญชีที่แตกต่างกัน


คำตอบ:


21

ทั้งหมดนี้รวบรวมจากเว็บไซต์และสแต็คโอเวอร์โฟลว์หวังว่านี่จะช่วยผู้ที่ยังใหม่กับ ssh

เพื่อให้คุณสามารถมีคีย์ ssh มากมาย

~/.ssh$ ls
yyy_id_rsa  yyy_id_rsa.pub  id_rsa  id_rsa.pub  known_hosts

หมายเหตุ: เราต้องเพิ่มจากนั้นไปยัง ssh-agent อาจจะมีการเพิ่ม id_rsa ดังนั้นเราจึงจำเป็นต้องเพิ่มคีย์ส่วนตัวอื่น ๆ

~/.ssh$ ssh-add yyy_id_rsa

ตอนนี้เราได้เพิ่มปุ่ม ssh ทั้งสองลงใน ssh-agent

เรามีหนึ่งอันสำหรับ bitbucket และอีกอันสำหรับ github

ดังนั้นเราจึงสร้างไฟล์ปรับแต่งแบบนี้

~/.ssh$ nano config
Host bit-yyyuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/yyy_id_rsa
User yyyuser

Host bit-xxxuser bitbucket.org
Hostname bitbucket.org
IdentityFile ~/.ssh/id_rsa
User xxxuser

Host git-xxxuser github.com
Hostname github.com
IdentityFile ~/.ssh/id_rsa
User xxxuser

หมายเหตุ: ฉันกำลังใช้ 2 ปุ่มที่แตกต่างกันสำหรับ 2 บัญชีที่แตกต่างกันใน bitbucket และอีกหนึ่งปุ่มสำหรับ Github

ตอนนี้เราต้องบอกพื้นที่เก็บข้อมูล git ที่จะใช้เพื่อให้ฉันจะได้รับคีย์ ssh เฉพาะสำหรับบัญชีนั้น

เปลี่ยนgit@bitbucket.orgyyyuser/yyyproject.gitเป็นgit@bit-yyyuser:yyyuser/yyyproject.git

ดังนั้นในโฟลเดอร์โครงการและเพิ่ม URL ระยะไกล

/var/www/yyyproject$ git remote add bit git@bit-yyyuser:yyyuser/yyyproject.git

ในโครงการอื่น ๆ

/var/www/xxxproject$ git remote add bitt git@bit-xxxuser:xxxuser/xxxproject.git

ตอนนี้คุณสามารถใช้การผลักและดึงได้อย่างง่ายดาย

:/var/www/yyyproject$ git pull bit master
From bit-yyyuser:yyyuser/yyyproject
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/yyyproject$

และโครงการอื่น

/var/www/xxxproject$ git push bitt ver1
To git@bit-xxxuser:xxxuser/xxxproject.git
 * branch            master     -> FETCH_HEAD
Already up-to-date.
:/var/www/xxxproject$ 

ตอนนี้ฉันไม่มีโครงการ github บนเครื่องท้องถิ่นดังนั้นเราจึงจำเป็นต้องโคลนโครงการ แต่เราต้องการเปลี่ยนแปลง URL เล็กน้อยเป็นโคลน

URL ของเราเป็นเช่นนี้

git@github.com:xxxuser/python.git

เนื่องจากเราต้องทำการโคลนด้วยคีย์เฉพาะเราเพียงแค่ต้องเปลี่ยนชื่อโฮสต์ด้วยโฮสต์ที่เรากำหนดไว้

git@git-xxxuser:xxxuser/python.git

ตามที่กำหนดไว้ในไฟล์ปรับแต่ง

และตอนนี้เราสามารถโคลน

:/var/www/us$ git clone git@git-xxxuser:xxxuser/python.git
Cloning into 'python'...
remote: Counting objects: 75, done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 75 (delta 18), reused 62 (delta 8)
Receiving objects: 100% (75/75), 6.29 KiB, done.
Resolving deltas: 100% (18/18), done.
:/var/www/us$ 

เราได้ระบุคีย์ ssh ที่แตกต่างกันสำหรับโฮสต์ที่ต่างกันหนึ่งอันสำหรับ git และอีกอันสำหรับ bitbucket ตอนนี้ระบบทราบว่าคีย์ ssh ใดที่จะใช้กับโฮสต์ใด

ตอนนี้เราสามารถดึงกดได้ง่าย


จะเกิดอะไรขึ้นหาก URL git ของฉันใช้ https ยังไงก็ตามที่จะทำงานกับมัน?
Gelin Luo

1

ฉันกำหนดค่า~/.ssh/configเช่นนี้

Host gitlab-as-thuc  
    HostName git.thuc.com
    User git
    IdentityFile ~/.ssh/id_rsa.thuc
    IdentitiesOnly yes

จากนั้นใช้ชื่อโฮสต์ที่กำหนดเองแทนโดเมนจริงใน git url:

git remote add thuc git@gitlab-as-thuc:your-repo.git  

สำหรับรายละเอียดเพิ่มเติมโปรดอ่านที่นี่: http://itblog.study.land/how-to-specify-different-ssh-keys-for-git-push-for-a-given-domain/

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