Salah satu kemungkinan untuk digunakan ~/.ssh/configadalah menggunakan Matchpembatasan bukan Hostpembatasan. Secara khusus Match Execpanggilan 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-admincocok 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 $SHELLvariabel 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/yourOwnPrivateKeyberisi kunci pribadi Anda dan yang ~/.ssh/gitolite-adminberisi kunci pribadi pengguna gitolite-admin. Saya menyertakan IdentitiesOnly yesdeklarasi 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_repoyang ingin Anda gunakan dengan tombol yang berbeda. Jika Anda memiliki beberapa repositori git@git.company.comdan sebagian besar dari mereka menggunakannya, ~/.ssh/yourOwnPrivateKeylebih masuk akal untuk memasukkan kunci ini sebagai default untuk host. Dalam hal ini ~/.ssh/configadalah:
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.combatasannya akan muncul setelah Match Execsatu atau yang satu.