Katakanlah alice
adalah pengguna github.com, dengan 2 atau lebih repositori pribadi repoN
. Untuk contoh ini kita akan bekerja hanya dengan dua repositori bernama repo1
danrepo2
https://github.com/alice/repo1
https://github.com/alice/repo2
Anda harus menarik dari repositori ini tanpa memasukkan kata sandi yang mungkin di server, atau di beberapa server. Anda ingin melakukan git pull origin master
misalnya, dan Anda ingin ini terjadi tanpa meminta kata sandi.
Anda tidak suka berurusan dengan ssh-agent, Anda telah menemukan (atau Anda sedang menemukan sekarang) tentang ~/.ssh/config
file yang membuat klien ssh Anda tahu apa kunci pribadi untuk digunakan tergantung pada Hostname dan nama pengguna, dengan entri konfigurasi sederhana yang terlihat seperti ini:
Host github.com
HostName github.com
User git
IdentityFile /home/alice/.ssh/alice_github.id_rsa
IdentitiesOnly yes
Jadi Anda pergi ke depan dan membuat (alice_github.id_rsa, alice_github.id_rsa.pub)
keypair Anda, Anda kemudian juga pergi ke .git/config
file repositori Anda dan Anda memodifikasi url dari remote Anda origin
menjadi sesuatu seperti ini:
[remote "origin"]
url = "ssh://git@github.com/alice/repo1.git"
Dan akhirnya Anda pergi ke bagian repositori Settings > Deploy keys
dan menambahkan kontenalice_github.id_rsa.pub
Pada titik ini Anda dapat melakukan git pull origin master
tanpa memasukkan kata sandi tanpa masalah.
tapi bagaimana dengan repositori kedua?
Jadi insting Anda adalah untuk mengambil kunci itu dan menambahkannya ke repo2
kunci Deploy, tetapi github.com akan kesalahan dan memberi tahu Anda bahwa kunci tersebut sudah digunakan.
Sekarang Anda pergi dan menghasilkan kunci lain (menggunakan ssh-keygen -t rsa -C "alice@alice.com"
tanpa kata sandi tentu saja), dan agar ini tidak menjadi berantakan, Anda sekarang akan memberi nama kunci Anda seperti ini:
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)
Anda sekarang akan meletakkan kunci publik baru repo2
di konfigurasi Menyebarkan kunci di github.com, tetapi sekarang Anda memiliki masalah ssh untuk ditangani.
Bagaimana ssh dapat mengetahui kunci mana yang digunakan jika repositori di-host pada github.com
domain yang sama ?
.ssh/config
File Anda menunjuk ke github.com
dan tidak tahu kunci mana yang digunakan ketika saatnya melakukan tarikan.
Jadi saya menemukan trik dengan github.com. Anda dapat memberi tahu klien ssh Anda bahwa setiap repositori tinggal di subdomain github.com yang berbeda, dalam hal ini, mereka akan repo1.github.com
danrepo2.github.com
Jadi hal pertama adalah mengedit .git/config
file pada klon repo Anda, jadi mereka terlihat seperti ini sebagai gantinya:
Untuk repo1
[remote "origin"]
url = "ssh://git@repo1.github.com/alice/repo1.git"
Untuk repo2
[remote "origin"]
url = "ssh://git@repo2.github.com/alice/repo2.git"
Dan kemudian, pada .ssh/config
file Anda , sekarang Anda akan dapat memasukkan konfigurasi untuk setiap subdomain :)
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
Sekarang Anda dapat git pull origin master
tanpa memasukkan kata sandi dari kedua repositori.
Jika Anda memiliki beberapa mesin, Anda bisa menyalin kunci ke masing-masing mesin dan menggunakannya kembali, tetapi saya menyarankan melakukan pekerjaan kaki untuk menghasilkan 1 kunci per mesin dan repo. Anda akan memiliki lebih banyak kunci untuk ditangani, tetapi Anda tidak akan terlalu rentan jika seseorang dikompromikan.