เริ่มเป็นรูปร่าง
ในการจัดการ 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==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> เพื่อบอก ssh-agent ให้รวมไว้เพื่อการใช้งาน <ชม /> ส่วนที่เหลือใช้ได้ดีสำหรับฉันด้วยการสอนที่กล่าวถึงข้างต้น