บัญชี GitHub หลายอันในคอมพิวเตอร์เครื่องเดียวกัน?


418

พยายามทำงานทั้งของฉันจริง "งาน" repos และ repos ส่วนตัวของฉันในศูนย์กลาง git จากคอมพิวเตอร์ของฉัน

บัญชีงานได้รับการตั้งค่าก่อนและทุกอย่างทำงานได้อย่างไร้ที่ติ

บัญชีส่วนตัวของฉัน แต่ดูเหมือนไม่สามารถผลักดันไปยัง repo ส่วนตัวของฉันซึ่งตั้งค่าภายใต้บัญชี / อีเมลอื่น

ฉันได้ลองคัดลอกรหัสงานไปยังบัญชีส่วนตัวของฉันแล้ว แต่นั่นเกิดข้อผิดพลาดเนื่องจากแน่นอนว่ากุญแจสามารถแนบกับบัญชีเดียวเท่านั้น

ฉันจะกด / ดึงเข้าและออกจากทั้งสองบัญชีจากข้อมูลประจำตัว GitHub ที่เกี่ยวข้องได้อย่างไร


3
ขั้นตอนที่ให้ไว้ในลิงค์http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accountsทำงานได้ดีสำหรับฉันและคุณเพียงเพิ่มสิ่งหนึ่งที่คุณ ต้องเพิ่มคีย์ repo ส่วนบุคคลของคุณด้วยโดยใช้ & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> เพื่อบอก ssh-agent ให้รวมไว้เพื่อการใช้งาน <ชม /> ส่วนที่เหลือใช้ได้ดีสำหรับฉันด้วยการสอนที่กล่าวถึงข้างต้น
Brut3e

2
"เพราะแน่นอนว่ากุญแจสามารถแนบกับบัญชีเดียวเท่านั้น" แน่นอน? ทำไม?
Sparr

Git 2.13 เป็นต้นไปรองรับการรวมเงื่อนไขใน. gitconfig ซึ่งเป็นวิธีที่มีประโยชน์ในการจัดการข้อมูลประจำตัวต่อลำดับชั้นของโฟลเดอร์ stackoverflow.com/a/36296990/901597
Joe Bowbeer

คำตอบ:


275

สิ่งที่คุณต้องทำคือกำหนดค่าการตั้งค่า SSH ด้วยหลายคู่คีย์ SSH

นอกจากนี้หากคุณทำงานกับที่เก็บหลายแห่งโดยใช้ตัวตนที่แตกต่างกันคุณจะต้องตรวจสอบให้แน่ใจว่าที่เก็บข้อมูลส่วนตัวของคุณมีการแทนที่การตั้งค่าผู้ใช้ดังนี้

การตั้งค่าชื่อผู้ใช้อีเมลและโทเค็น GitHub - การแทนที่การตั้งค่าสำหรับแต่ละ repos https://help.github.com/articles/setting-your-commit-email-address-in-git/

หวังว่านี่จะช่วยได้

หมายเหตุ: บางส่วนของคุณอาจต้องใช้อีเมลที่แตกต่างกันสำหรับที่เก็บที่แตกต่างกันจาก git 2.13คุณสามารถตั้งค่าอีเมลบนพื้นฐานของไดเรกทอรีโดยการแก้ไขไฟล์กำหนดค่าส่วนกลางที่พบที่: ~/.gitconfigใช้เงื่อนไขเช่น:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

และจากนั้น config งานเฉพาะของคุณ ~ / work / .gitconfig จะมีลักษณะเช่นนี้:

[user]
    email = pavan.kataria@company.tld

ขอบคุณ @alexg สำหรับการแจ้งให้ฉันทราบในความคิดเห็น


4
ลิงค์ที่ 3 ตอนนี้ใช้งานไม่ได้ (หลายคีย์ SSH)
RustyTheBoyRobot

12
ลิงค์แรกนั้นจะนำหน้าไปยังหน้าบัญชีผู้ใช้กับบัญชีองค์กรอีกครั้ง (ไม่แน่ใจว่าเป็นสิ่งที่ตั้งใจไว้ แต่เดิม) บทช่วยสอนนี้ง่ายต่อการติดตามและแก้ไขปัญหาของฉัน
Eric H.

1
@ Camilo เพราะฉันไม่รู้ว่าลิงก์ที่อัพเดทใหม่คืออะไรดังนั้นถ้าเขารู้ถึงลิงค์ที่อัพเดทแล้วมันคงเป็นเรื่องที่เขาจะต้องติดใจ :)
Pavan

4
@AlmasAdilbek เกือบ 3 ปีแล้วที่การเชื่อมโยงถูกทำลายและดำเนินต่อไป สนใจที่จะหาบทความทางเลือกหรือค้นหาแหล่งต้นฉบับอีกครั้งเพื่อให้คุณสามารถอัปเดตลิงค์ให้ฉันได้ไหม? ฉันไม่สามารถแก้ไขลิงก์ที่เสียหายได้ตลอดไป
Pavan

3
นี่ไม่ใช่คำตอบโดยไม่ต้องสรุปขั้นตอนที่สำคัญในการโพสต์จริงของคุณ คำตอบนี้ได้รับความเดือดร้อนจากการเชื่อมโยงเน่าหนึ่งครั้ง แต่ยังไม่ได้ทำการปรับปรุง tob ที่จำเป็นให้คำตอบที่แท้จริงสำหรับคำถาม
ขอบคุณ

139

ใช้ HTTPS:

เปลี่ยน URL ระยะไกลเป็น https:

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

และคุณเป็นคนดีที่จะไป:

git push

เพื่อให้แน่ใจว่ากระทำปรากฏที่ดำเนินการโดย USERNAME หนึ่งติดตั้งกระป๋องuser.nameและuser.emailสำหรับโครงการนี้ด้วย:

git config user.name USERNAME
git config user.email USERNAME@example.com

8
ทางออกที่ง่ายที่สุดสำหรับการดาวน์โหลดอย่างรวดเร็วจากที่เก็บส่วนตัวอื่น
Jaap Geurts

1
นี่เป็นทางออกที่ดีที่สุดที่ฉันพบในกอง
Harvinder Singh

วิธีการแก้ปัญหานี้ให้วิธีที่ง่ายที่สุดในขณะที่ฉันไม่ต้องการเพิ่มปุ่ม ssh เพิ่มเติม เพียงแค่ทราบถ้าคุณได้ตั้งค่าของคุณuser.nameและuser.emailด้วย--globalธงเพียงทำสิ่งที่เขาพูดข้างต้นเพื่อตั้งค่าภายในสำหรับเพียงหนึ่ง repo นั่นแก้ไขปัญหามากมาย ตอนนี้เพื่อลบ repo เก่า ....
thatrobotguy

72

เริ่มเป็นรูปร่าง

ในการจัดการ repo คอมไพล์ภายใต้ github / bitbucket / บัญชีใด ๆ ที่แยกจากกันคุณเพียงแค่ต้องสร้างคีย์ SSH ใหม่

แต่ก่อนที่เราจะสามารถเริ่มต้นผลัก / ดึง repos ด้วยตัวตนที่สองของคุณเราต้องทำให้คุณมีรูปร่าง - ลองสมมติว่าระบบของคุณติดตั้งด้วยคู่ปกติid_rsaและid_rsa.pubคีย์ ตอนนี้คุณtree ~/.sshมีลักษณะเช่นนี้

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

ก่อนชื่อคู่ที่สำคัญ - การเพิ่มชื่อที่อธิบายจะช่วยให้คุณจำคีย์ที่ใช้สำหรับผู้ใช้ / ระยะไกล

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

ต่อไปเรามาสร้างคู่คีย์ใหม่ - ที่นี่ฉันจะตั้งชื่อคีย์ใหม่github-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

ตอนนี้เมื่อเราดูที่tree ~/.sshเราเห็น

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

ต่อไปเราต้องตั้งค่า~/.ssh/configไฟล์ที่จะกำหนดการตั้งค่าคีย์ของเรา เราจะสร้างมันขึ้นมาโดยมีสิทธิ์อ่าน / เขียนเท่านั้นอย่างเหมาะสม

$ (umask 077; touch ~/.ssh/config)

เปิดที่ด้วยเครื่องมือแก้ไขที่คุณชื่นชอบและเพิ่มเนื้อหาต่อไปนี้

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

สันนิษฐานว่าคุณจะมี repos ที่มีอยู่ซึ่งเชื่อมโยงกับข้อมูลประจำตัว GitHub หลักของคุณ ด้วยเหตุผลดังกล่าว github.com "ค่าเริ่มต้น" Hostจึงถูกตั้งค่าให้ใช้mainuserรหัสของคุณ หากคุณไม่ต้องการให้บัญชีหนึ่งบัญชีใดบัญชีหนึ่งอีกบัญชีหนึ่งฉันจะแสดงวิธีอัปเดตrepos ที่มีอยู่ในระบบของคุณเพื่อใช้การกำหนดค่า ssh ที่อัปเดต


เพิ่มคีย์ SSH ใหม่ของคุณเพื่อ gitHub

ตรงไปที่github.com/settings/keysเพื่อเพิ่มสาธารณะใหม่ของคุณกุญแจ

คุณสามารถรับเนื้อหากุญแจสาธารณะได้โดยใช้: คัดลอก / วางไปที่ GitHub

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

ตอนนี้ข้อมูลประจำตัวผู้ใช้ใหม่ของคุณคือการตั้งค่าทั้งหมด - ด้านล่างเราจะแสดงวิธีใช้งาน


การทำสิ่งต่าง ๆ เสร็จสิ้น: การโคลน repo

ดังนั้นสิ่งนี้มารวมกันเพื่อทำงานกับคอมไพล์และ GitHub? เพราะคุณไม่สามารถมีไก่โดยไม่มีและไข่เราจะดูที่การโคลน repo ที่มีอยู่ สถานการณ์นี้อาจนำไปใช้กับคุณหากคุณมีบัญชี GitHub ใหม่สำหรับที่ทำงานของคุณและคุณถูกเพิ่มเข้าในโครงการของ บริษัท

สมมติว่าgithub.com/someorg/somerepoมีอยู่แล้วและคุณถูกเพิ่มเข้าไป - การโคลนนิ่งนั้นง่ายเหมือน

$ git clone github.com-otheruser:someorg/somerepo.git

ที่เป็นตัวหนาส่วนที่จะต้องตรงกับHostการตั้งค่าชื่อเราไว้ใน~/.ssh/configไฟล์ ที่ถูกต้องเชื่อมต่อคอมไพล์กับที่สอดคล้องกันIdentityFileและรับรองความถูกต้องคุณด้วย GitHub


ทำสิ่งต่าง ๆ ให้สำเร็จ: สร้าง repo ใหม่

เพราะคุณไม่สามารถมีไก่โดยไม่มีและไข่เราจะดูที่การเผยแพร่ repo ใหม่ในบัญชีรองของคุณ สถานการณ์นี้ใช้กับผู้ใช้ที่สร้างใหม่เนื้อหาโดยใช้บัญชี Github รอง

สมมติว่าคุณทำงานเล็ก ๆ น้อย ๆ ในพื้นที่แล้วและตอนนี้คุณก็พร้อมที่จะผลักดัน GitHub คุณสามารถติดตามพร้อมกับฉันหากคุณต้องการ

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

ตอนนี้กำหนดค่า repo นี้เพื่อใช้ตัวตนของคุณ

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

ตอนนี้ให้กระทำการครั้งแรกของคุณ

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

ตรวจสอบการคอมมิชชันเพื่อดูตัวตนใหม่ของคุณถูกใช้โดยใช้บันทึก git

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

เอาล่ะถึงเวลาผลักดัน GitHub แล้ว! เนื่องจาก github ยังไม่รู้เกี่ยวกับ repo ใหม่ของเราโปรดไปที่github.com/newและสร้าง repo ใหม่ของคุณ - ตั้งชื่อsomerepo

ตอนนี้ในการกำหนดค่า repo ของคุณเป็น "คุย" เพื่อ GitHub โดยใช้ข้อมูลประจำตัว / ข้อมูลประจำตัวที่ถูกต้องเราได้เพิ่มระยะไกล สมมติว่าชื่อผู้ใช้ Github ของคุณสำหรับบัญชีใหม่ของคุณคือsomeuser...

$ git remote add origin github.com-otheruser:someuser/somerepo.git

ที่เป็นตัวหนาส่วนที่มีความสำคัญอย่างแน่นอนและมันจะต้องตรงกับHostที่เรากำหนดไว้ในของคุณ~/.ssh/configไฟล์

สุดท้ายผลักดัน repo

$ git push origin master

อัพเดต repo ที่มีอยู่เพื่อใช้การกำหนดค่า SSH ใหม่

สมมติว่าคุณมีโคลน repo อยู่แล้ว แต่ตอนนี้คุณต้องการใช้การกำหนดค่า SSH ใหม่ ในตัวอย่างข้างต้นเราเก็บ repos ที่มีอยู่ของคุณไว้ด้วยการกำหนดคู่id_rsa/ id_rsa.pubคีย์ก่อนหน้าของคุณให้Host github.comในไฟล์ปรับแต่ง SSH ของคุณ ไม่มีอะไรผิดปกติกับเรื่องนี้ แต่ตอนนี้ฉันมีการกำหนดค่าอย่างน้อย 5 github และฉันไม่ชอบคิดว่าหนึ่งในนั้นเป็นการตั้งค่า "เริ่มต้น" - ฉันค่อนข้างชัดเจนเกี่ยวกับแต่ละคน

ก่อนที่เราจะมีสิ่งนี้

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

ดังนั้นเราจะอัปเดตสิ่งนี้ให้เป็นปัจจุบัน (เปลี่ยนแปลงเป็นตัวหนา )

Host github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

แต่นั่นหมายความว่าตอนนี้ repo ที่มีอยู่กับgithub.comรีโมตจะไม่สามารถทำงานกับไฟล์ข้อมูลประจำตัวนี้ได้อีกต่อไป แต่ไม่ต้องกังวลมันเป็นการแก้ไขที่ง่าย

หากต้องการอัปเดต repo ใด ๆ เพื่อใช้การกำหนดค่า SSH ใหม่ของคุณเพียงแค่เปิดไฟล์ git ของ repo แล้วอัปเดต URL!

$ cd existingrepo
$ nano .git/config

อัปเดตฟิลด์ต้นทางระยะไกล (การเปลี่ยนแปลงเป็นตัวหนา )

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

แค่นั้นแหละ. ตอนนี้คุณสามารถpush/ pullเนื้อหาใจของคุณ


สิทธิ์ของไฟล์คีย์ SSH

หากคุณประสบปัญหากับกุญแจสาธารณะของคุณทำงานไม่ถูกต้อง SSH ค่อนข้างเข้มงวดในการอนุญาตไฟล์ใน~/.sshไดเรกทอรีและไฟล์คีย์ที่เกี่ยวข้อง

ตามกฎทั่วไปแล้วไดเรกทอรีใด ๆ ควรเป็น700และไฟล์ใด ๆ ควรเป็น600ซึ่งหมายความว่าพวกเขาเป็นเจ้าของแบบอ่าน / เขียนเท่านั้นไม่มีกลุ่ม / ผู้ใช้คนอื่นสามารถอ่าน / เขียนได้

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

ฉันจะจัดการกุญแจ SSH ของฉันได้อย่างไร

ฉันจัดการกุญแจ SSH แยกจากกันสำหรับโฮสต์ทุกตัวที่ฉันเชื่อมต่อด้วยเช่นถ้ามีปุ่มใดคีย์หนึ่งถูกทำลายฉันไม่ต้องอัปเดตคีย์ในที่อื่น ๆ ที่ฉันเคยใช้คีย์นั้น นี่เป็นเหมือนเมื่อคุณได้รับการแจ้งเตือนจาก Adobe ว่ามีข้อมูลของผู้ใช้ 150 ล้านคนถูกขโมย - ตอนนี้คุณต้องยกเลิกบัตรเครดิตนั้นและอัปเดตบริการทุกอย่างที่ขึ้นอยู่กับมัน - เป็นเรื่องที่น่ารำคาญ

นี่คือ~/.sshลักษณะของไดเรกทอรีของฉัน: ฉันมีหนึ่ง.pemคีย์สำหรับผู้ใช้แต่ละคนในโฟลเดอร์สำหรับแต่ละโดเมนที่ฉันเชื่อมต่อ ฉันใช้.pemปุ่มเพื่อให้ฉันต้องการเพียงหนึ่งไฟล์ต่อหนึ่งคีย์

$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│   ├── naomik.pem
│   ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│   ├── naomi.pem
├── somedomain.com
│   ├── someuser.pem
└── someotherdomain.org
    └── someuser.pem

และนี่คือ/.ssh/configไฟล์ที่เกี่ยวข้องของฉัน- เห็นได้ชัดว่าสิ่งที่ gitub มีความเกี่ยวข้องกับการตอบคำถามเกี่ยวกับ GitHub แต่คำตอบนี้มีวัตถุประสงค์เพื่อให้คุณมีความรู้ในการจัดการข้อมูลประจำตัว ssh ของคุณในบริการ / เครื่องจักรจำนวนเท่าใดก็ได้

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

รับคีย์สาธารณะ SSH ของคุณจากคีย์ PEM

เหนือคุณสังเกตเห็นว่าฉันมีเพียงหนึ่งไฟล์สำหรับแต่ละคีย์ เมื่อฉันต้องการให้รหัสสาธารณะฉันก็สร้างมันได้ตามต้องการ

ดังนั้นเมื่อ github ขอกุญแจสาธารณะของคุณ ssh เรียกใช้คำสั่งนี้เพื่อส่งออกคีย์สาธารณะเพื่อ stdout - คัดลอก / วางในกรณีที่จำเป็น

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

หมายเหตุนี่เป็นกระบวนการเดียวกับที่ฉันใช้สำหรับเพิ่มรหัสของฉันลงในเครื่องระยะไกล ssh-rsa AAAA...ค่าถูกคัดลอกไประยะไกลของ~/.ssh/authorized_keysไฟล์


การแปลงคู่id_rsa/ id_rsa.pubคีย์ของคุณเป็นรูปแบบ PEM

ดังนั้นคุณต้องการที่จะทำให้เชื่องไฟล์สำคัญของคุณและตัดทอนลงบางระบบไฟล์ cruft? แปลงคู่กุญแจของคุณให้เป็นหนึ่งเดียว PEMนั้นง่ายมาก

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

หรือทำตามตัวอย่างของเราด้านบนเราได้เปลี่ยนชื่อid_rsa -> github-mainuserและid_rsa.pub -> github-mainuser.pub- ดังนั้น

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

ตอนนี้เพียงเพื่อให้แน่ใจว่าเราได้แปลงถูกต้องแล้วคุณจะต้องยืนยันว่ารหัสสาธารณะที่สร้างขึ้นนั้นตรงกับกุญแจสาธารณะอันเก่าของคุณ

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

ตอนนี้คุณมีgithub-mainuser.pemไฟล์แล้วคุณสามารถลบไฟล์เก่าgithub-mainuserและของคุณได้อย่างปลอดภัยgithub-mainuser.pubไฟล์ไฟล์ - เฉพาะไฟล์ PEM เท่านั้นที่จำเป็น เพียงสร้างรหัสสาธารณะเมื่อใดก็ตามที่คุณต้องการ ^ _ ^


การสร้างปุ่ม PEM ตั้งแต่เริ่มต้น

คุณไม่จำเป็นต้องสร้างคู่คีย์ส่วนตัว / สาธารณะแล้วแปลงเป็นคีย์ PEM เดี่ยว คุณสามารถสร้างคีย์ PEM ได้โดยตรง

มาสร้างกันเถอะ newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

รับคีย์สาธารณะ SSH เหมือนกัน

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==

2
ฉันเข้าใจว่านี่เป็นคำถามเก่า แต่นั่นก็ไม่ได้แก้ตัวความจริงที่ว่าเกือบทุกคำตอบที่นี่ขึ้นอยู่กับการเชื่อมโยงไปยังการสอนบางส่วนและดังนั้นจึงอาจมีการเชื่อมโยงเน่า การเชื่อมโยงแหล่งที่มา / การอ้างอิง แต่คุณไม่สามารถพึ่งพาลิงก์ได้หากคุณไม่สรุปบิตวิกฤติในคำตอบที่โพสต์ไว้ที่นี่
ขอบคุณ

ฉันยกระดับคำตอบที่ยอดเยี่ยมและรายละเอียดของคุณเป็นวิธีที่ถูกต้องที่จะทำมันชัดเจน ปัญหาของฉันคือความซับซ้อนและหลังจากใช้งานบัญชีไปสองสามปีฉันได้รับบัญชีใหม่จากนั้นไม่สามารถเรียกคืนได้ว่าจะทำอย่างไร "วิธีที่ถูกต้อง" วิธีการของฉันด้านล่างนั้นง่ายมาก - ฉันเพิ่งสร้างไฟล์ใหม่ 3 ไฟล์และสคริปต์ใหม่หนึ่งไฟล์และฉันก็สบายดี มันทำงานอย่างไม่มีที่ติสำหรับฉันเป็นเวลาหลายปี ผู้อ่านสามารถตัดสินใจได้ว่าอะไรดีที่สุดสำหรับพวกเขา
David H

DavidH ฉันขอขอบคุณคำกล่าว คำตอบจะรู้สึกซับซ้อนถ้าคุณคิดโดยรวม แต่ผู้อ่านต้องการเพียงความกังวลของเขา / เธอด้วยส่วนเล็ก ๆ ของคำตอบหากเป้าหมายเดียวของพวกเขาคือการเพิ่มอัตลักษณ์ GitHub หนึ่งเดียว - ส่วนที่เหลือทั้งหมดของ คำตอบมีวัตถุประสงค์เพื่อตั้งค่าคุณด้วยโซลูชันที่มีประสิทธิภาพสำหรับการจัดการคีย์ SSH โดยทั่วไปและเป็นทางเลือกที่สมบูรณ์
ขอบคุณ

ฉันคิดว่าgit clone github.com-otheruser:someorg/somerepo.gitต้องเป็นgit clone git@github.com-otheruser:someorg/somerepo.git(เพิ่มgit@) Leastways นั่นคือสิ่งที่ฉันต้องการ
CommonsWare

@CommonsWare ตัวเลือกบรรทัดคำสั่งทั้งหมดเช่นการระบุผู้ใช้สามารถทำได้ในการกำหนดค่า SSH เช่นกัน ตัวอย่างเช่น: Host github.com(ขึ้นบรรทัดใหม่) User git(ขึ้นบรรทัดใหม่)IdentityFile ...
ขอบคุณ

24

ด้วยการสร้างชื่อแทนโฮสต์ที่แตกต่างกันไปที่ github.com ใน ~ / .ssh / config ของคุณและมอบชื่อแทนโฮสต์ ssh ของตนเองให้คุณสามารถใช้บัญชี GitHub ได้หลายบัญชีโดยไม่สับสน นั่นเป็นเพราะ github.com ไม่ได้แยกความแตกต่างจากผู้ใช้ซึ่งเป็นเพียงแค่คอมไพล์ แต่โดยใช้คีย์ ssh ที่คุณใช้เชื่อมต่อ เพียงกำหนดค่าต้นกำเนิดระยะไกลโดยใช้นามแฝงโฮสต์ของคุณเอง”

สรุปข้างต้นเป็นความเห็นชอบในบล็อกโพสต์ด้านล่าง

ฉันพบคำอธิบายนี้ชัดเจนที่สุดแล้ว และมันก็ใช้ได้สำหรับฉันอย่างน้อยก็ในเดือนเมษายน 2555

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/



22

รายละเอียดที่http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/เชื่อมโยงกับโดย mishaba ทำงานได้ดีมากสำหรับฉัน

จากหน้านั้น:

$ touch ~/.ssh/config

จากนั้นแก้ไขไฟล์นั้นให้เป็นแบบนี้ (หนึ่งรายการต่อบัญชี):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY

8
ฉันยังจะต้องทราบว่า "github.com" หรือ "github-COMPANY" จะต้องใช้เมื่อทำการโคลน (และอาจเป็นคำสั่งอื่น ๆ ) ต้องการgit clone git@github-COMPANY/repo/name.gitรับคีย์ ssh ที่ถูกต้อง
hellatan

@dtan: ฉันจะใช้สิ่งนี้ได้อย่างไรหากฉันต้องทำสำเนาผ่าน https git clone https://github-COMPANY/GitUserName/projectname.gitดูเหมือนจะไม่ทำงาน คีย์เริ่มต้นที่ใช้ github.com ใช้งานได้ดี
Isaac Nequittepas

1
@IacacRemuant, คุณต้องทำมากกว่า https หรือไม่? ทุกครั้งที่คุณต้องการดึง / ดันคุณต้องป้อนข้อมูลรับรองผู้ใช้ของคุณ มันจะดีที่สุดถ้าคุณทำได้ git: //github-COMPANY...projectname.git มีการส่งข้อความข้อผิดพลาดสำหรับการโทร https หรือไม่
เฮลลาตัน

@ ตาล: ฉันมีปัญหาบางอย่างกับพอร์ต 22 แม้จะเห็นได้ชัดว่าเปิดให้ฉันแล้ว ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. https เป็นวิธีเดียวที่ผ่านมา $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed ฉันไม่แน่ใจว่ามันเกี่ยวข้องกับไฟล์ปรับแต่งหรือวิธีที่ฉันพยายามเลียนแบบการโทรคอมไพล์ด้วย https
Isaac Nequittepas

ท้ายที่สุดฉันจะทำการวิเคราะห์เชิงลึกโดยพยายามทำทุกอย่างและโพสต์คำถามอย่างเหมาะสม
Isaac Nequittepas

13
  • ไปที่ ~ / .ssh
  • สร้างไฟล์ชื่อ config (ไม่มีนามสกุล)
  • เปิดไฟล์กำหนดค่าและเพิ่มรหัสด้านล่าง (เปลี่ยนตามบัญชีของคุณ)

    1. บัญชี 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. บัญชี 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. บัญชี 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • เพิ่ม URL ระยะไกลดังต่อไปนี้

    1. บัญชี 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. บัญชี 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. บัญชี 3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

ตรวจสอบให้แน่ใจว่าชื่อ IdentityFile เหมือนกับที่คุณสร้างขึ้นในระหว่างการสร้างคีย์ ssh


คุณช่วยกรุณาอธิบายว่าทำไมคุณใช้PreferredAuthentications publickey?
Oliver Pearmain

@OliverPearmain ที่นี่ฉันบอก ssh ว่าวิธีการที่เราต้องการการรับรองความถูกต้องคือ publickey คุณสามารถใช้รหัสผ่านใน PreferredAuthentications แต่คุณอาจต้องป้อนรหัสผ่านสำหรับการตรวจสอบ
Pranav VR

1
ขอบคุณคำตอบ @Pranav VR ดูเหมือนว่าฉันต้องการใช้ :-) เดียวกัน
Oliver Pearmain

11

ฉันใช้เชลล์สคริปต์เพื่อสลับฉันไปยังบัญชีใดก็ตามที่ฉันต้องการให้เป็น "ใช้งาน" เป็นหลักคุณเริ่มต้นจากเริ่มต้นใหม่รับบัญชีหนึ่งที่กำหนดค่าอย่างถูกต้องและทำงานแล้วย้ายไฟล์เหล่านี้ไปยังชื่อที่มีคำนำหน้าที่เหมาะสม จากนั้นคุณสามารถใช้คำสั่ง "github" หรือ "gitxyz" เพื่อสลับ:

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

ฉันโชคดีมากกับสิ่งนี้ ฉันยังสร้างสคริปต์เรียกใช้ใน Xcode (สำหรับผู้ใช้ Mac ของคุณ) ดังนั้นมันจะไม่สร้างโครงการของฉันจนกว่าฉันจะมีการตั้งค่าที่เหมาะสม (ตั้งแต่ใช้งานคอมไพล์):

เรียกใช้สคริปต์ที่วางหลังจากการอ้างอิง (โดยใช้ / bin / ksh เป็นเชลล์):

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

แก้ไข: เพิ่มการทดสอบสำหรับการมีอยู่ของไฟล์ใหม่และการคัดลอกไฟล์เก่าไปยัง / tmp เพื่อแสดงความคิดเห็นโดย @naomik ด้านล่าง


ระวังเมื่อโพสต์คัดลอกและวาง boilerplate / คำต่อคำตอบสำหรับคำถามหลายข้อเหล่านี้มักจะถูกตั้งค่าสถานะเป็น "สแปม" โดยชุมชน หากคุณทำเช่นนี้ก็มักจะหมายถึงคำถามซ้ำกันดังนั้นให้ตั้งค่าสถานะเป็นเช่นนั้นแทน: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev

1
นี่คือฝันร้าย หากมีใครบางคนที่จะเรียกใช้สคริปต์นี้ก่อนที่จะเข้าใจว่าพวกเขาid_rsaและid_rsa.pubกุญแจจะถูกลบพวกเขาจะถูกล็อคออกจากระยะไกล
ขอบคุณ

@naomik การปรับปรุงสคริปต์เพื่อตรวจสอบทั้งไฟล์ใหม่ครั้งแรกและจะบันทึกไฟล์เก่าใน tmp /
เดวิด H

10

คำตอบนี้มีไว้สำหรับผู้เริ่มต้น (กูรูที่ไม่มีคอมไพล์) ฉันเพิ่งมีปัญหานี้และอาจเป็นเพียงฉัน แต่คำตอบส่วนใหญ่ดูเหมือนจะต้องการความเข้าใจค่อนข้างสูงของคอมไพล์ หลังจากอ่านคำตอบล้นสแต็คจำนวนมากรวมถึงกระทู้นี้นี่คือขั้นตอนที่ฉันต้องดำเนินการเพื่อสลับระหว่างบัญชี GitHub ได้อย่างง่ายดาย (เช่นสมมติว่าบัญชี GitHub สองบัญชีgithub.com/personalและgitHub.com/work ):

  1. ตรวจสอบคีย์ ssh ที่มีอยู่:เปิด Terminal แล้วเรียกใช้คำสั่งนี้เพื่อดู / แสดงรายการls -al ~/.ssh
    ไฟล์ssh keys ที่มีนามสกุลพร้อมด้วย.pubเป็นคีย์ ssh ของคุณดังนั้นคุณควรมีสองไฟล์สำหรับpersonalและworkบัญชี หากมีเพียงหนึ่งหรือไม่มีเลยเวลาในการสร้างปัญญาอื่น ๆ ข้ามสิ่งนี้ไป

    - การสร้างคีย์ ssh : เข้าสู่ระบบ GitHub (ไม่ว่าจะเป็นส่วนตัวหรือที่ทำงาน) ไปที่การตั้งค่าและคัดลอกอีเมลที่เกี่ยวข้อง
    ตอนนี้กลับไปที่ Terminal และเรียกใช้ssh-keygen -t rsa -C "the copied email"คุณจะเห็น: การ

    สร้างคู่คีย์สาธารณะ / ส่วนตัว rsa
    ป้อนไฟล์ที่จะบันทึกคีย์ (/.../.ssh/id_rsa):


    id_rsaเป็นชื่อเริ่มต้นสำหรับการสร้างคีย์ ssh ในไม่ช้าเพื่อคัดลอกพา ธ และเปลี่ยนชื่อเริ่มต้นเช่น /.../.ssh/id_rsa_workถ้าสร้างสำหรับบัญชีการทำงาน ระบุรหัสผ่านหรือเพียงแค่ป้อนเพื่อเพิกเฉยและคุณจะอ่านอะไรบางอย่างภาพสุ่มของคีย์คือ:และรูปภาพ เสร็จแล้ว
    ทำขั้นตอนนี้ซ้ำอีกครั้งสำหรับบัญชี GitHub ที่สองของคุณ ตรวจสอบให้แน่ใจว่าคุณใช้ที่อยู่อีเมลที่ถูกต้องและชื่อคีย์ ssh อื่น (เช่น id_rsa_personal) เพื่อหลีกเลี่ยงการเขียนทับ
    ในขั้นตอนนี้คุณจะเห็นปุ่มสองปุ่ม ssh เมื่อทำงานls -al ~/.sshอีกครั้ง
  2. เชื่อมโยงคีย์ ssh กับบัญชี gitHub:ขั้นตอนถัดไปคือการคัดลอกหนึ่งในคีย์ ssh เรียกใช้ แต่เปลี่ยนชื่อคีย์ ssh ของคุณเอง: pbcopy < ~/.ssh/id_rsa_work.pubแทนที่id_rsa_work.pubด้วยสิ่งที่คุณเรียกว่าเป็นของคุณ
    ตอนนี้ที่สำคัญ SSH ของเราจะถูกคัดลอกไปยังคลิปบอร์ดกลับไปที่บัญชี GitHub [ตรวจสอบให้แน่ใจว่าคุณกำลังเข้าสู่ระบบบัญชีการทำงานถ้าคีย์ SSH ที่คุณคัดลอกid_rsa_work] และนำทางไปยัง
    การตั้งค่า - SSH และจีพีจีคีย์และคลิกที่คีย์ SSH ใหม่ปุ่ม (ไม่ใช่ปุ่ม GPG ใหม่ btw: D)
    ให้ชื่อเรื่องกับคีย์นี้วางกุญแจแล้วคลิกที่ปุ่มเพิ่ม SSH ขณะนี้คุณได้เพิ่มคีย์ ssh สำเร็จหรือสังเกตเห็นว่ามีทั้งหมดที่ใช้ได้ (หรือคุณมีข้อผิดพลาดเนื่องจากคุณเลือกคีย์ GPG ใหม่ แทนคีย์ SSH ใหม่ : D)
  3. เชื่อมโยงคีย์ ssh กับบัญชี gitHub : ทำซ้ำขั้นตอนข้างต้นสำหรับบัญชีที่สองของคุณ
  4. แก้ไขการกำหนดค่าโกลบอล git:ขั้นตอนสุดท้ายคือการตรวจสอบให้แน่ใจว่าไฟล์การกำหนดค่าโกลบอลรับรู้บัญชี github ทั้งหมด (ดังนั้นจะพูด)
    เรียกใช้git config --global --editเพื่อแก้ไขไฟล์โกลบอลนี้หากเปิด vim และคุณไม่รู้วิธีใช้งานให้กดiเพื่อเข้าสู่โหมดแทรกแก้ไขไฟล์ดังด้านล่างและกด esc ตามด้วย:wqเพื่อออกจากโหมดแทรก:

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

เสร็จสิ้น! ตอนนี้เมื่อพยายามที่จะผลักหรือดึงจาก repo คุณจะถูกถามว่าบัญชี GitHub ใดที่ควรเชื่อมโยงกับ repo นี้และถูกถามเพียงครั้งเดียวการกำหนดค่าในท้องถิ่นจะจดจำลิงก์นี้ไม่ใช่การกำหนดค่าทั่วโลก ใน repos ต่างๆที่เชื่อมโยงกับบัญชีต่างๆโดยไม่ต้องแก้ไขการกำหนดค่าทั่วโลกในแต่ละครั้ง


พวกเขาควรอนุญาตให้แท็กสำหรับคำตอบนี่คือสำหรับ mac OS
user4015990

5

การแก้ไขที่ง่ายและสะดวกเพื่อหลีกเลี่ยงความสับสน ..

เพื่อให้ผู้ใช้ Windows สามารถใช้บัญชี git หลายบัญชีหรือแตกต่างกันสำหรับโครงการต่างๆ

ขั้นตอนต่อไปนี้: ไปที่แผงควบคุมและค้นหาตัวจัดการข้อมูลรับรอง จากนั้นไปที่ตัวจัดการข้อมูลประจำตัว -> ข้อมูลรับรองของ Windows

ตอนนี้ลบโหนดgit: https // github.comภายใต้หัวข้อหนังสือรับรองทั่วไป

สิ่งนี้จะลบข้อมูลรับรองปัจจุบัน ตอนนี้คุณสามารถเพิ่มโครงการใด ๆ ผ่าน git pull มันจะถามชื่อผู้ใช้และรหัสผ่าน

เมื่อคุณประสบปัญหากับบัญชีอื่นให้ทำกระบวนการเดียวกัน

ขอบคุณ

อ้างถึงรูปภาพ


4

เพิ่งคิดออกนี้สำหรับ Windows โดยใช้ข้อมูลประจำตัวสำหรับแต่ละ repo:

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

รูปแบบของหนังสือรับรอง https://github.com บอกผู้ช่วยข้อมูลรับรองถึง URL สำหรับข้อมูลรับรอง 'useHttpPath' บอกให้ผู้จัดการข้อมูลประจำตัวใช้เส้นทางสำหรับข้อมูลประจำตัว หาก useHttpPath ถูกละไว้แล้วผู้จัดการข้อมูลประจำตัวที่จะเก็บข้อมูลรับรองสำหรับหนึ่งhttps://github.com หากรวมอยู่แล้วตัวจัดการข้อมูลประจำตัวจะจัดเก็บข้อมูลรับรองหลายใบซึ่งเป็นสิ่งที่ฉันต้องการจริงๆ


2

ฉันพบว่าอัญมณีนี้มีประโยชน์มาก: sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

ช่วยในการสลับคีย์ ssh อย่าลืมสำรองข้อมูลทุกอย่างเสียก่อน!

นอกจากนี้เพื่อให้แน่ใจว่าการส่งมอบมีที่อยู่อีเมลที่ถูกต้องที่เกี่ยวข้องกับพวกเขาฉันแน่ใจว่าไฟล์ ~ / .gitconfig มีที่อยู่อีเมลที่ถูกต้อง


2

นอกเหนือจากการสร้างคีย์ SSH หลายรายการสำหรับหลายบัญชีคุณยังสามารถพิจารณาเพิ่มผู้ทำงานร่วมกันในแต่ละโครงการโดยใช้อีเมลบัญชีเดียวกันและจัดเก็บรหัสผ่านอย่างถาวร

#this store the password permanently
$ git config --global credential.helper wincred

ฉันมีการตั้งค่าหลายบัญชีด้วยอีเมลที่แตกต่างกันจากนั้นให้ผู้ใช้และอีเมลเดียวกันในแต่ละบัญชีเป็นหนึ่งในผู้ทำงานร่วมกัน ด้วยวิธีนี้ฉันสามารถเข้าถึงบัญชีทั้งหมดโดยไม่ต้องเพิ่มคีย์ SSH หรือเปลี่ยนเป็นชื่อผู้ใช้อื่นและอีเมลสำหรับการตรวจสอบสิทธิ์


2

วิธีที่ง่ายและตรงไปตรงมา (IMHO) - ไม่มีไฟล์กำหนดค่าที่ไม่ยุ่งยากมากเกินไป

เพียงสร้างคีย์ ssh ใหม่

สมมติว่าคุณมีบัญชีงาน GitHub ใหม่เพียงแค่สร้างรหัสใหม่:

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

ตอนนี้คุณควรมีอันเก่าและอันใหม่ที่จะเห็นพวกเขาวิ่ง:

ls -al ~/.ssh

คุณต้องเรียกใช้ข้างต้นเพียงครั้งเดียว

จากนี้ไปทุกครั้งที่คุณต้องการสลับไปมาระหว่างสองสิ่งนี้ให้เรียกใช้:

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

เพื่อเปลี่ยนเป็นสวิตช์เก่าให้รันอีกครั้ง:

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

อีกวิธีที่ง่ายกว่าคือการใช้แอพเดสก์ท็อปหลายตัวเช่นสิ่งที่ฉันกำลังทำโดยใช้บัญชี A บนเดสก์ท็อป Github ขณะที่ใช้บัญชี B ใน Github Kraken



1

ในกรณีที่คุณไม่ต้องการยุ่งกับ~/.ssh/configไฟล์ที่กล่าวถึงที่นี่คุณสามารถเรียกใช้git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"ใน repo ที่คุณต้องการกระทำจากบัญชีอื่น

ส่วนที่เหลือของการตั้งค่าเหมือนกัน:

  1. สร้างคีย์ SSH ใหม่สำหรับบัญชีที่สองด้วย ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. ลงชื่อเข้าใช้ Github ด้วยบัญชีอื่นของคุณไปที่https://github.com/settings/keysและวางเนื้อหาของ~/.ssh/custom_id_rsa.pub

  3. ตรวจสอบให้แน่ใจว่าคุณใช้ SSH แทน HTTPS เป็น URL ระยะไกล: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git


0

คุณไม่จำเป็นต้องมีบัญชีสองบัญชีที่แตกต่างกันสำหรับส่วนบุคคลและที่ทำงาน อันที่จริง Github แนะนำให้คุณรักษาบัญชีเดียวและช่วยให้คุณรวมทั้งสอง

ทำตามลิงค์ด้านล่างเพื่อรวมหากคุณตัดสินใจว่าไม่จำเป็นต้องดูแลหลายบัญชี

https://help.github.com/articles/merging-multiple-user-accounts/


0

ซึ่งแตกต่างจากคำตอบอื่น ๆ ที่คุณต้องปฏิบัติตามไม่กี่ขั้นตอนการใช้งานที่แตกต่างกันสอง GitHubบัญชีจากเครื่องเดียวกันสำหรับฉันมันทำงานอยู่ในขั้นตอนที่สอง

คุณเพียงแค่ต้อง:

1) สร้างคู่คีย์สาธารณะและส่วนตัวของ SSHสำหรับแต่ละบัญชีของคุณภายใต้~/.sshสถานที่ที่มีชื่อแตกต่างกันและ

2) เพิ่มการสร้างสาธารณะกุญแจที่จะอยู่ภายใต้บัญชีที่เกี่ยวข้องSettings>>SSH and GPG keysNew SSH Key >>

ในการสร้างคู่คีย์สาธารณะและส่วนตัว SSH ให้ใช้คำสั่งต่อไปนี้:

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

จากคำสั่งข้างต้นid_rsa_WORKและid_rsa_WORK.pubไฟล์จะถูกสร้างขึ้นสำหรับบัญชีงานของคุณ(เช่น git.work.com) id_rsa_PERSONALและid_rsa_PERSONAL.pubจะถูกสร้างขึ้นสำหรับบัญชีส่วนตัวของคุณ(เช่น github.com)

เมื่อสร้างแล้วให้คัดลอกเนื้อหาจาก*.pubไฟล์public ( ) แต่ละไฟล์และทำขั้นตอนที่ 2 สำหรับแต่ละบัญชี

PS : ไม่จำเป็นต้องสร้างรายการโฮสต์สำหรับแต่ละบัญชี git ใต้~/.ssh/configไฟล์ตามที่ระบุไว้ในคำตอบอื่น ๆ หากชื่อโฮสต์ของทั้งสองบัญชีแตกต่างกัน


คุณจะสลับระหว่างสองบัญชีในพีซีของคุณได้อย่างไร
user4015990

1
ไม่จำเป็นต้องเปลี่ยน เมื่อใดก็ตามที่คุณคัดลอก repo ในท้องถิ่นข้อมูลบัญชีจะถูกบันทึกโดย git ใน repo ท้องถิ่นของคุณ ดังนั้นเมื่อใดก็ตามที่คุณทำ git ดันหรือดึงเข้าไปใน repo ท้องถิ่นนั้นการกำหนดค่าด้านบนจะตรวจสอบบัญชีที่ต้องพิจารณา
Sahil Chhabra

0

หากคุณติดตั้งWSLคุณสามารถมีบัญชี git แยกกันสองบัญชี - บัญชีหนึ่งใน WSL และบัญชีหนึ่งใน windows


0

คุณควรและจะต้องไม่ผลักดันโครงการด้วยข้อมูลประจำตัวทั่วไปบางอย่าง เมื่อเริ่มต้นบนเครื่องใหม่ใช้ขั้นตอนต่อไปนี้เพื่อตั้งค่าและใช้ข้อมูลรับรอง gitlab ของคุณอย่างถูกต้อง:

  • สร้างปุ่ม pubic / private ssh บนเครื่อง
  • คัดลอกวางกุญแจสาธารณะในอินเทอร์เฟซ gitlab / github ui (ใครก็ตามที่บอกวิธีการทำผ่านสาย cmd จะได้รับเบียร์ฟรี ... )
  • ตรวจสอบให้แน่ใจว่าคุณโคลน repo ผ่าน git ไม่ใช่ http url
  • ตั้งค่านามแฝง git เพื่อหลีกเลี่ยงการพิมพ์คำนำหน้าเดียวกันอย่างต่อเนื่องเป็นคำสั่ง git
  • ในระหว่างคอมไพล์ยอมรับเสมอใช้ผู้เขียนและธงชาติอีเมล
  • ใช้คอมไพล์ตามปกติคุณจะทำมัน

ทั้งหมดนี้เป็นดังนี้:

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone git@git.in.org.net:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. นำทางไปยังไดเรกทอรีที่คุณต้องการผลักดันการเปลี่ยนแปลงของคุณไปยังบัญชี GitHub อื่น
  2. สร้างคีย์ SSH ใหม่ในเทอร์มินัล / บรรทัดคำสั่งของคุณ

    ssh-keygen -t rsa -C“ your-email-address”

  3. ต่อไปนี้จะแสดง:

    สร้างคู่คีย์ rsa สาธารณะ / ส่วนตัว ป้อนไฟล์ที่จะบันทึกคีย์ (/home/your_username/.ssh/id_rsa):

คัดลอกและวางพา ธ ตามด้วยชื่อที่ระบุได้สำหรับไฟล์:

/home/your_username/.ssh/id_rsa_personal

4) มันจะถามคุณสำหรับสิ่งต่อไปนี้:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5) ตอนนี้คุณสามารถพิมพ์คำสั่งต่อไปนี้เพื่อดูคีย์ SSH ทั้งหมดที่คุณมีในเครื่องของคุณ:

ls -al ~/.ssh

คุณควรจะเห็นไฟล์คีย์ SSH ใหม่ของคุณ อย่างที่คุณเห็นในของฉันฉันมีทั้ง id_rsa_test และ id_rsa_personal.pub

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6) ถัดไปคุณต้องคัดลอกคีย์ SSH ซึ่งเก็บไว้ในไฟล์ id_rsa_personal.pub คุณสามารถเปิดสิ่งนี้ในโปรแกรมแก้ไขข้อความที่คุณเลือก ฉันกำลังใช้ atom ดังนั้นฉันจึงเปิดไฟล์โดยใช้คำสั่งต่อไปนี้:

atom ~/.ssh/id_rsa_personal.pub

จากนั้นคุณจะได้รับสิ่งที่คล้ายกันนี้:

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKVHNVNVNVNVVGZVZHZHVNVNVNZVZZZZI 1N 2 ครั้ง ALC3HZZ + DWUT83R / Dc01E / YzLc5ZFRZ

7) คัดลอกสิ่งนี้และนำทางไปยังบัญชี GitHub ของคุณ→การตั้งค่า→คีย์ SSH และ GPG 8) คลิกที่คีย์ SSH ใหม่ คัดลอกคีย์ให้ชื่อและเพิ่ม 9) เพิ่มรหัสจาก terminal

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10) กำหนดค่าผู้ใช้และรหัสผ่าน

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11) เราพร้อมที่จะส่งมอบและผลักดันในขณะนี้

git init
git add .
git commit 
git push

0

หากคุณสร้างหรือโคลนที่เก็บอื่นและคุณไม่สามารถดึงoriginหรือupstreamเพิ่มคีย์ ssh ที่ไดเรกทอรีนั้นโดยใช้คำสั่งต่อไปนี้จะทำงาน

นี่เป็นข้อผิดพลาดที่ฉันได้รับที่นี่:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

ฉันใช้คำสั่งต่อไปนี้ใช้งานได้:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

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