Saya memiliki akun pribadi dan akun perusahaan di Unfuddle. Pada Unfuddle kunci SSH hanya dapat digunakan pada satu akun, jadi saya perlu membuat kunci SSH terpisah pada laptop saya untuk kedua akun. Saya berlari ssh-keygen -t rsa
untuk menghasilkan dua kunci dengan nama yang berbeda (personal adalah nama default dan perusahaan adalah {company} _rsa). Masalahnya sekarang adalah tampaknya kunci default saya digunakan di mana-mana dan saya tidak bisa menemukan cara menentukan kunci untuk digunakan dalam Git untuk setiap repo.
Jadi pertanyaan saya adalah: Bagaimana cara menentukan kunci SSH untuk digunakan berdasarkan repo-ke-repo?
Saya mengatur ssh_config saya (~ / .ssh / config) tetapi sepertinya masih tidak berfungsi.
konfigurasi:
Host {personalaccount}.unfuddle.com
HostName {personalaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/id_rsa
Host {companyaccount}.unfuddle.com
HostName {companyaccount}.unfuddle.com
User git
IdentityFile /Users/dave/.ssh/cage_rsa
File konfigurasi repo Git saya untuk repo di akun unfuddle perusahaan saya terlihat seperti ini:
[remote "origin"]
url = git@{companyaccount}.unfuddle.com:{companyaccount}/overall.git
fetch = +refs/heads/*:refs/remotes/origin/*
Jadi saya tidak yakin apakah ada sesuatu yang salah dengan konfigurasi ssh saya atau konfigurasi git saya.
Jawaban:
Jika Anda memiliki ssh-agent aktif yang
id_rsa
memuat kunci Anda , maka masalahnya kemungkinan bahwa ssh menawarkan kunci itu terlebih dahulu. Unfuddle mungkin menerimanya untuk otentikasi (misalnya dalam sshd ) tetapi menolaknya untuk otorisasi untuk mengakses repositori perusahaan (misalnya dalam perangkat lunak internal apa pun yang mereka gunakan untuk otorisasi, mungkin sesuatu yang mirip dengan Gitolite). Mungkin ada cara untuk menambahkan kunci pribadi Anda ke akun perusahaan (beberapa orang tidak berbagicorp_rsa
file kunci publik dan pribadi yang sama , bukan?).Kata
IdentitiesOnly
.ssh/config
kunci konfigurasi dapat digunakan untuk membatasi kunci yang ssh tawarkan ke sshd jarak jauh hanya untuk yang ditentukan melaluiIdentityFile
kata kunci (yaitu akan menolak untuk menggunakan kunci tambahan apa saja yang kebetulan dimuat ke agen ssh aktif ).Coba
.ssh/config
bagian ini :Kemudian, gunakan URL Git seperti ini:
Jika Anda ingin memanfaatkan sepenuhnya
.ssh/config
mekanisme ini, Anda dapat memberikan nama host kustom Anda sendiri dan mengubah nama pengguna default:Kemudian, gunakan URL Git seperti ini:
sumber
ssh-add -l
sebelum Anda menggunakan alias host Git Anda. Juga file kunci publik harus ada sehingga ssh dapat mengenali kunci yang disimpan oleh ssh-agent . Anda dapat membuat ulang.pub
file yang hilang dengan perintah sepertissh-keygen -f blah -y > blah.pub
.man ssh_config
Sesuatu seperti
Dan gunakan
personal_repo
sebagai host di repo git Anda.sumber
Host
hanya pengidentifikasi - tidak perlu nama domain lengkap. Itu mungkin menciptakan beberapa bug tersembunyi. Jika Anda mengubahnya, Anda tidak perlu mengeja nama lengkap di konfigurasi git Anda.IdentityFile dan IdentitiesHanya berfungsi dengan baik. Apa yang mengganggu saya harus ingat untuk menggunakan nama host yang berbeda untuk terhubung, dan fakta bahwa koneksi agen yang diteruskan masih memegang semua kunci, yang berarti bahwa jika host jarak jauh dikompromikan, mereka dapat menggunakan identitas saya saat saya di .
Saya baru-baru ini mulai menggunakan:
https://github.com/ccontavalli/ssh-ident
ini adalah pembungkus ssh, itu:
sumber
Berikut cara yang tepat jika Anda ingin menggunakan ssh agent:
Penjelasan: jika Anda memiliki kunci pribadi di direktori ~ / .ssh Anda, ssh-agent tidak akan digunakan. Jadi kami membuat kunci publik dengan nama lain, sehingga ssh terpaksa menggunakan ssh-agent. Ini juga membantu jika Anda tidak memiliki akses ke kunci pribadi (mis. Penerusan ssh agent)
sumber
ssh-add -L
, bukanssh-agent
.