Menjadi bugar
Untuk mengelola repo git di bawah github / bitbucket / akun apa pun yang terpisah, Anda hanya perlu membuat kunci SSH baru.
Tetapi sebelum kita dapat mulai mendorong / menarik repo dengan identitas kedua Anda, kami harus membuat Anda menjadi bugar - Mari kita asumsikan sistem Anda diatur dengan pasangan kunci id_rsa
dan tipikal id_rsa.pub
. Sekarang ini tree ~/.ssh
penampilanmu seperti ini
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Pertama, beri nama pasangan kunci - menambahkan nama deskriptif akan membantu Anda mengingat kunci mana yang digunakan untuk pengguna / jarak jauh
# 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
Selanjutnya, mari kita buat pasangan kunci baru - di sini saya akan memberi nama kunci barugithub-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Sekarang, ketika kita melihat, tree ~/.ssh
kita melihat
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Selanjutnya, kita perlu mengatur ~/.ssh/config
file yang akan menentukan konfigurasi kunci kita. Kami akan membuatnya dengan izin pemilik-baca / tulis-saja yang tepat
$ (umask 077; touch ~/.ssh/config)
Buka itu dengan editor favorit Anda, dan tambahkan konten berikut
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Agaknya, Anda akan memiliki beberapa repo yang ada yang terkait dengan identitas github utama Anda. Untuk alasan itu, github.com "default" Host
disiapkan untuk menggunakan mainuser
kunci Anda . Jika Anda tidak ingin memilih satu akun daripada yang lain, saya akan menunjukkan cara memperbarui repo yang ada di sistem Anda untuk menggunakan konfigurasi ssh yang diperbarui.
Tambahkan kunci SSH baru Anda ke github
Pergilah ke github.com/settings/keys untuk menambahkan kunci publik baru Anda
Anda bisa mendapatkan konten kunci publik menggunakan: salin / tempel ke github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Sekarang identitas pengguna baru Anda sudah siap - di bawah ini kami akan menunjukkan kepada Anda bagaimana menggunakannya.
Selesaikan semuanya: kloning repo
Jadi bagaimana ini bekerja bersama dengan git dan github? Nah, karena Anda tidak dapat memiliki ayam tanpa dan telur, kita akan melihat kloning repo yang ada. Situasi ini mungkin berlaku untuk Anda jika Anda memiliki akun github baru untuk tempat kerja Anda dan Anda ditambahkan ke proyek perusahaan.
Katakanlah github.com/someorg/somerepo
sudah ada dan Anda ditambahkan - kloning semudah itu
$ git clone github.com-otheruser:someorg/somerepo.git
Yang tebal bagian harus cocok dengan Host
nama kita setup di Anda ~/.ssh/config
berkas. Itu benar menghubungkan git ke yang sesuai IdentityFile
dan benar mengotentikasi Anda dengan github
Selesaikan semuanya: membuat repo baru
Karena Anda tidak dapat memiliki ayam tanpa telur dan telur, kami akan melihat penerbitan repo baru di akun sekunder Anda. Situasi ini berlaku untuk pengguna yang membuat konten baru menggunakan akun github sekunder mereka.
Mari kita asumsikan Anda telah melakukan sedikit pekerjaan secara lokal dan sekarang Anda siap untuk mendorong ke github. Anda dapat mengikuti saya jika Anda mau
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Sekarang konfigurasikan repo ini untuk menggunakan identitas Anda
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Sekarang buat komit pertama Anda
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Periksa komit untuk melihat identitas baru Anda digunakan menggunakan git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Baiklah, saatnya untuk mendorong ke github! Karena github belum tahu tentang repo baru kami, pertama pergi ke github.com/baru dan buat repo baru Anda - beri nama somerepo
Sekarang, untuk mengonfigurasi repo Anda ke "bicara" ke github menggunakan identitas / kredensial yang benar, kami telah menambahkan sebuah remote. Dengan asumsi nama pengguna github Anda untuk akun baru Anda adalah someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Itu tebal bagian benar-benar penting dan itu harus sesuai dengan Host
yang kita didefinisikan dalam Anda ~/.ssh/config
berkas
Terakhir, dorong repo
$ git push origin master
Perbarui repo yang ada untuk menggunakan konfigurasi SSH baru
Katakanlah Anda sudah memiliki beberapa repo yang dikloning, tetapi sekarang Anda ingin menggunakan konfigurasi SSH baru. Dalam contoh di atas, kami menjaga repo Anda yang ada tetap dalam kebijaksanaan dengan menetapkan pasangan id_rsa
/ id_rsa.pub
kunci sebelumnya ke Host github.com
dalam file konfigurasi SSH Anda. Tidak ada yang salah dengan ini, tetapi saya memiliki setidaknya 5 konfigurasi github sekarang dan saya tidak suka menganggap salah satu dari mereka sebagai konfigurasi "default" - Saya lebih suka secara eksplisit tentang masing-masing.
Sebelum kita punya ini
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Jadi sekarang kami akan memperbarui itu ke ini (perubahan dicetak tebal )
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
Tetapi itu berarti bahwa sekarang repo yang ada dengan github.com
remote tidak akan lagi berfungsi dengan file identitas ini. Tapi jangan khawatir, ini adalah perbaikan sederhana.
Untuk memperbarui repo yang ada untuk menggunakan konfigurasi SSH baru Anda, cukup buka file konfigurasi git repo dan perbarui url!
$ cd existingrepo
$ nano .git/config
Perbarui bidang asal jarak jauh (perubahan dicetak tebal )
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Itu dia. Sekarang Anda bisa push
/ pull
sesuka hati Anda
Izin file kunci SSH
Jika Anda mengalami masalah dengan kunci publik Anda tidak berfungsi dengan benar, SSH cukup ketat pada izin file yang diizinkan pada ~/.ssh
direktori Anda dan file kunci yang sesuai
Sebagai aturan praktis, direktori apa pun seharusnya 700
dan file apa pun harus 600
- ini berarti hanya pemilik-baca / tulis-saja - tidak ada grup / pengguna lain yang dapat membaca / menulisnya
$ 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
Bagaimana saya mengelola kunci SSH saya
Saya mengelola kunci SSH yang terpisah untuk setiap host yang saya hubungkan, sehingga jika ada satu kunci yang pernah dikompromikan, saya tidak perlu memperbarui kunci di setiap tempat saya telah menggunakan kunci itu. Ini seperti ketika Anda mendapatkan pemberitahuan dari Adobe bahwa 150 juta informasi pengguna mereka dicuri - sekarang Anda harus membatalkan kartu kredit itu dan memperbarui setiap layanan yang bergantung padanya - sungguh merepotkan.
Begini ~/.ssh
tampilannya direktori saya : Saya punya satu .pem
kunci untuk setiap pengguna, dalam folder untuk setiap domain yang saya hubungkan. Saya menggunakan .pem
kunci jadi saya hanya perlu satu file per kunci.
$ 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
Dan inilah /.ssh/config
file yang sesuai saya - jelas hal-hal github relevan untuk menjawab pertanyaan ini tentang github, tetapi jawaban ini bertujuan untuk membekali Anda dengan pengetahuan untuk mengelola identitas ssh Anda pada sejumlah layanan / mesin.
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
Mendapatkan kunci publik SSH Anda dari kunci PEM
Di atas Anda memperhatikan bahwa saya hanya memiliki satu file untuk setiap tombol. Ketika saya perlu memberikan kunci publik, saya hanya menghasilkan sesuai kebutuhan.
Jadi ketika github meminta kunci publik ssh Anda, jalankan perintah ini untuk mengeluarkan kunci publik ke stdout - salin / tempel di tempat yang diperlukan
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Catatan, ini juga proses yang sama yang saya gunakan untuk menambahkan kunci saya ke mesin jarak jauh. The ssh-rsa AAAA...
nilai disalin ke remote ~/.ssh/authorized_keys
berkas
Mengonversi pasangan id_rsa
/ id_rsa.pub
kunci Anda ke format PEM
Jadi Anda ingin menjinakkan Anda file-file kunci dan mengurangi beberapa kesalahan sistem file? Mengubah pasangan kunci Anda menjadi PEM tunggal mudah
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Atau, mengikuti contoh kami di atas, kami mengganti nama id_rsa -> github-mainuser
dan id_rsa.pub -> github-mainuser.pub
- jadi
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Sekarang hanya untuk memastikan bahwa kami telah mengonversi ini dengan benar, Anda ingin memverifikasi bahwa kunci publik yang dihasilkan cocok dengan kunci publik lama Anda
# 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==
Sekarang setelah Anda memiliki github-mainuser.pem
file Anda, Anda dapat menghapus file github-mainuser
dan github-mainuser.pub
file lama Anda dengan aman - hanya file PEM yang diperlukan; cukup buat kunci publik kapan pun Anda membutuhkannya ^ _ ^
Membuat kunci PEM dari awal
Anda tidak perlu membuat pasangan kunci pribadi / publik dan kemudian mengonversi ke kunci PEM tunggal. Anda dapat membuat tombol PEM secara langsung.
Mari kita buat newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Mendapatkan kunci publik SSH adalah sama
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
ssh-add ~/.ssh/id_rsa_COMPANY
<br/> untuk memberitahu ssh-agent untuk memasukkannya untuk digunakan. <hr /> Rest berfungsi dengan baik untuk saya dengan tutorial yang disebutkan di atas.