Saya memiliki kasus penggunaan berikut: Saya ingin dapat mendorong untuk [email protected]:gitolite-admin
menggunakan kunci pribadi pengguna gitolite-admin
, sementara saya ingin mendorong untuk [email protected]:some_repo
menggunakan kunci pribadi 'saya sendiri'. AFAIK, saya tidak bisa menyelesaikan ini menggunakan ~/.ssh/config
, karena nama pengguna dan nama server identik dalam kedua kasus. Karena saya sebagian besar menggunakan kunci pribadi saya sendiri, saya mendefinisikannya ~/.ssh/config
untuk [email protected]
. Adakah yang tahu cara menimpa kunci yang digunakan untuk satu git
doa?
(Selain itu: gitolite membedakan siapa yang mendorong berdasarkan kunci, jadi itu bukan masalah, dalam hal akses, kepemilikan, dan audit, bahwa string pengguna @ server identik untuk pengguna yang berbeda.)
Jawaban:
Bahkan jika pengguna dan host sama, mereka masih dapat dibedakan
~/.ssh/config
. Misalnya, jika konfigurasi Anda terlihat seperti ini:Maka Anda cukup menggunakan
gitolite-as-alice
dangitolite-as-bob
alih-alih nama host di URL Anda:Catatan
Anda ingin menyertakan opsi
IdentitiesOnly yes
untuk mencegah penggunaan id default. Jika tidak, jika Anda juga memiliki file id yang cocok dengan nama default, mereka akan dicoba terlebih dahulu karena tidak seperti opsi konfigurasi lainnya (yang mematuhi "first in win")IdentityFile
opsi ditambahkan ke daftar identitas untuk dicoba. Lihat: /server/450796/how-could-i-stop-ssh-offering-a-wrong-key/450807#450807sumber
git@
di remote tidak diperlukan karena diberikan diUser
baris konfigurasi.IdentitiesOnly yes
segera setelah baris denganIdentityFile
untuk tuan rumah. Tampaknya itu melewati beberapa identitas dan salah satunya diblokir dari mengakses host.Sebuah pendekatan alternatif yang ditawarkan di atas oleh Mark Longair adalah dengan menggunakan alias yang akan menjalankan setiap perintah git, pada setiap jarak jauh, dengan kunci SSH alternatif. Idenya pada dasarnya adalah untuk mengganti identitas SSH Anda ketika menjalankan perintah git.
Keuntungan relatif terhadap pendekatan alias host dalam jawaban lain:
remote
secara eksplisit.Saya menggunakan beberapa skrip kecil dan alias git
admin
. Dengan begitu saya bisa melakukannya, misalnya:Untuk mendorong ke remote standar menggunakan kunci SSH alternatif ("admin"). Sekali lagi, Anda bisa menggunakan perintah apa pun (tidak adil
push
) dengan alias ini. Anda bahkan dapat melakukannyagit admin clone ...
untuk mengkloning repositori yang hanya akan memiliki akses untuk menggunakan kunci "admin" Anda.Langkah 1: Buat kunci SSH alternatif, secara opsional mengatur frasa sandi jika Anda melakukan ini pada mesin orang lain.
Langkah 2: Buat skrip yang disebut "ssh-as.sh" yang menjalankan hal-hal yang menggunakan SSH, tetapi menggunakan kunci SSH yang diberikan daripada default:
Langkah 3: Buat skrip yang disebut "git-as.sh" yang menjalankan perintah git menggunakan kunci SSH yang diberikan.
Langkah 4: Tambahkan alias (menggunakan sesuatu yang sesuai untuk "PATH_TO_SCRIPTS_DIR" di bawah):
Lebih detail di: http://noamlewis.wordpress.com/2013/01/24/git-admin-an-alias-for-running-git-commands-as-a-privileged-ssh-identity/
sumber
$@
->"$@"
agar aman.Anda dapat menggunakan variabel lingkungan git
GIT_SSH_COMMAND
. Jalankan ini di terminal Anda di bawah repositori git Anda:Ganti
~/.ssh/your_private_key
dengan jalur ssh private key yang ingin Anda gunakan. Dan Anda dapat mengubah perintah git berikutnya (dalam contoh inigit submodule update --init
) kepada orang lain sepertigit pull
,git fetch
, dllsumber
Satu sistem berbasis Unix (Linux, BSD, Mac OS X), identitas default disimpan di direktori $ HOME / .ssh , dalam 2 file:
private key: $HOME/.ssh/id_rsa public key: $HOME/.ssh/id_rsa.pub
Ketika Anda menggunakanssh
tanpa opsi-i
, ia menggunakan kunci pribadi default untuk mengotentikasi dengan sistem jarak jauh.Jika Anda memiliki kunci pribadi lain yang ingin Anda gunakan, misalnya $ HOME / .ssh / deploy_key , Anda harus menggunakan
ssh -i ~/.ssh/deploy_key ...
Itu menjengkelkan. Anda dapat menambahkan baris berikut ke $ HOME / .bash_profile Anda :
ssh-add ~/.ssh/deploy_key ssh-add ~/.ssh/id_rsa
Jadi setiap kali Anda menggunakan
ssh
ataugit
atauscp
(pada dasarnyassh
juga), Anda tidak perlu menggunakan opsi-i
lagi.Anda dapat menambahkan kunci sebanyak yang Anda suka di file $ HOME / .bash_profile .
sumber
Alternatif lain adalah dengan menggunakan ssh-ident, untuk mengelola identitas ssh Anda .
Secara otomatis memuat dan menggunakan kunci berbeda berdasarkan direktori kerja Anda saat ini, opsi ssh, dan seterusnya ... yang berarti Anda dapat dengan mudah memiliki direktori kerja / pribadi dan direktori / yang secara transparan berakhir menggunakan kunci dan identitas berbeda dengan ssh.
sumber
Saya menggunakan Git Bash di Win7. Berikut ini bekerja untuk saya.
Buat file config di ~ / .ssh / config atau c: / users / [your_user_name] /. Ssh / config. Dalam file, masukkan:
Saya kira host harus berupa URL dan bukan hanya "nama" atau referensi untuk host Anda. Sebagai contoh,
Path juga dapat ditulis dalam format / c / users / [user_name] / ....
Solusi yang disediakan oleh Giordano Scalzo juga bagus. https://stackoverflow.com/a/9149518/1738546
sumber
Dari git 2.10 ke atas juga dimungkinkan untuk menggunakan pengaturan gitconfig sshCommand. Status dokumen :
Contoh penggunaan adalah:
git config core.sshCommand "ssh -i ~/.ssh/[insert_your_keyname]
Dalam beberapa kasus ini tidak berfungsi karena ssh_config mengesampingkan perintah, dalam hal ini cobalah
ssh -i ~/.ssh/[insert_your_keyname] -F /dev/null
untuk tidak menggunakan ssh_config.sumber
Saya telah merangkai dan menguji dengan github pendekatan berikut, berdasarkan membaca jawaban lain, yang menggabungkan beberapa teknik:
Keuntungan dari pendekatan ini adalah, sekali diatur, tidak memerlukan pekerjaan tambahan untuk memperbaikinya - misalnya, Anda tidak perlu mengubah URL jarak jauh atau ingat untuk mengkloning sesuatu secara berbeda - penulisan ulang URL membuat semuanya berfungsi .
~/.ssh/config
~/.gitconfig
~/dev/work/.gitconfig
Selama Anda menyimpan semua repo pekerjaan Anda di bawah ~ / dev / work dan barang-barang pribadi di tempat lain, git akan menggunakan kunci SSH yang benar ketika melakukan tarikan / klon / dorongan ke server, dan itu juga akan melampirkan alamat email yang benar ke semua komitmen Anda.
Referensi:
1
2
sumber
includeIf
seharusnya hanya berfungsi jika ada hadiah.git
direktori yang saya pikir?Jika menggunakan versi Git tentang ssh di windows, baris file identitas dalam konfigurasi ssh terlihat seperti
dimana
/c
untukc:
Untuk memeriksa, di bash git lakukan
sumber
Anda mungkin perlu menghapus (atau mengomentari) konfigurasi Host default
sumber
Anda paling ditentukan dalam file config key ssh:
sumber
Seperti orang lain yang disebutkan,
core.sshCommand
config dapat digunakan untuk mengganti kunci SSH dan parameter lainnya.Berikut adalah exmaple tempat Anda memiliki kunci alternatif yang dinamai
~/.ssh/workrsa
dan ingin menggunakannya untuk semua repositori yang dikloning di bawah~/work
..gitconfig
file baru di bawah~/work
:~/.gitconfig
, tambahkan:sumber
Salah satu kemungkinan untuk digunakan
~/.ssh/config
adalah menggunakanMatch
pembatasan bukanHost
pembatasan. Secara khususMatch Exec
panggilan perintah shell untuk memutuskan apakah akan menerapkan deklarasi atau tidak. Dalam bash Anda bisa menggunakan perintah berikut:Ini menggunakan
[
perintah bash untuk memverifikasi apakah dua string sama. Dalam hal ini ia menguji apakah string[email protected]: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
:Dalam contoh ini saya berasumsi yang
~/.ssh/yourOwnPrivateKey
berisi kunci pribadi Anda dan yang~/.ssh/gitolite-admin
berisi kunci pribadi penggunagitolite-admin
. Saya menyertakanIdentitiesOnly 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[email protected]
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:Perhatikan bahwa pesanan penting dan
Host git.company.com
batasannya akan muncul setelahMatch Exec
satu atau yang satu.sumber
Konfigurasikan repositori Anda menggunakan
git config
. Sebagai contoh:sumber