Salah satu kemungkinan untuk digunakan ~/.ssh/config
adalah menggunakan Match
pembatasan bukan Host
pembatasan. Secara khusus Match Exec
panggilan perintah shell untuk memutuskan apakah akan menerapkan deklarasi atau tidak. Dalam bash Anda bisa menggunakan perintah berikut:
[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]
Ini menggunakan [
perintah bash untuk memverifikasi apakah dua string sama. Dalam hal ini ia menguji apakah string git@git.company.com:gitolite-admin
cocok dengan output yang diperoleh dari $(git config --get remote.origin.url)''
perintah.
Anda dapat menggunakan perintah lain yang mengidentifikasi repositori tempat shell aktif. Agar ini berfungsi, penting untuk memiliki $SHELL
variabel yang didefinisikan untuk shell Anda, dalam kasus saya /bin/bash
. Contoh lengkapnya adalah sebagai berikut ~/.ssh/config
:
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Match Exec "[ git@git.company.com:some_repo = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Dalam contoh ini saya berasumsi yang ~/.ssh/yourOwnPrivateKey
berisi kunci pribadi Anda dan yang ~/.ssh/gitolite-admin
berisi kunci pribadi pengguna gitolite-admin
. Saya menyertakan IdentitiesOnly yes
deklarasi untuk memastikan bahwa hanya satu kunci yang ditawarkan ke server git, yang disebutkan oleh Mark Longair . Deklarasi lain hanyalah opsi ssh standar untuk git.
Anda dapat menambahkan konfigurasi ini jika Anda memiliki beberapa some_repo
yang ingin Anda gunakan dengan tombol yang berbeda. Jika Anda memiliki beberapa repositori git@git.company.com
dan sebagian besar dari mereka menggunakannya, ~/.ssh/yourOwnPrivateKey
lebih masuk akal untuk memasukkan kunci ini sebagai default untuk host. Dalam hal ini ~/.ssh/config
adalah:
Match Exec "[ git@git.company.com:gitolite-admin = $(git config --get remote.origin.url)'' ]"
IdentityFile ~/.ssh/gitolite-admin
IdentitiesOnly yes
Host git.company.com
IdentityFile ~/.ssh/yourOwnPrivateKey
IdentitiesOnly yes
ForwardAgent no
ForwardX11 no
ForwardX11Trusted no
Perhatikan bahwa pesanan penting dan Host git.company.com
batasannya akan muncul setelah Match Exec
satu atau yang satu.