Saya mengalami masalah dalam mendapatkan dua kunci SSH / akun GitHub yang berbeda untuk bermain bersama dengan baik. Saya memiliki pengaturan berikut:
Repos dapat diakses dari satu akun menggunakan [email protected]:accountname
Repos dapat diakses dari akun lain menggunakan [email protected]:anotheraccount
Setiap akun memiliki kunci SSH sendiri. Kedua kunci SSH telah ditambahkan dan saya telah membuat file konfigurasi. Saya tidak percaya file konfigurasi sudah benar. Saya tidak yakin bagaimana menentukan bahwa repo yang diakses menggunakan [email protected]:accountname
harus digunakan id_rsa
dan [email protected]:anotheraccount
harus digunakan id_rsa_anotheraccount
.
git pull
terus gagal & meminta kode sandi sekolah, meskipun file Identitas terpisah, "IdentitiesOnly = yes," domain & Hostname terpisah, semuanya ada dissh-add -l
... Kunci uni adalah 'pertama' terlepas dari pengaturan itu. Harus memindahkan bagiannya di bawah yang lain di .ssh / config, dan sekaranggit pull
dari kedua akta GitHub berhasil tanpa meminta kata sandi uni ssh.Jawaban:
Respons Andy Lester akurat tetapi saya menemukan langkah tambahan penting yang saya perlukan untuk membuatnya bekerja. Dalam mencoba menyiapkan dua profil, satu untuk pribadi dan satu untuk pekerjaan,
~/.ssh/config
kira-kira saya kira-kira sebagai berikut:Profil pekerjaan saya tidak mengambil sampai saya melakukan
ssh-add ~/.ssh/work_rsa
. Setelah itu koneksi ke github menggunakan profil yang benar. Sebelumnya mereka default ke kunci publik pertama.Untuk Tidak dapat membuka koneksi ke agen otentikasi Anda saat menggunakan
ssh-add
,periksa: https://stackoverflow.com/a/17695338/1760313
sumber
ssh-add
adalah apa yang saya lewatkan.IdentitiesOnly yes
keHost *
bagian~/.ssh/config
file Anda . Ini memberitahu ssh untuk benar-benar menggunakan IdentityFiles yang Anda tentukan, daripada mengirim spam ke server dengan semuanya.Baru-baru ini saya harus melakukan ini dan harus menyaring semua jawaban ini dan komentar mereka untuk akhirnya mengumpulkan informasi, jadi saya akan meletakkan semuanya di sini, dalam satu posting, untuk kenyamanan Anda:
Langkah 1: tombol ssh
Buat keypairs yang Anda perlukan. Dalam contoh ini saya telah menamai saya default / asli 'id_rsa' (yang merupakan default) dan yang baru saya 'id_rsa-work':
Langkah 2: ssh config
Atur beberapa profil ssh dengan membuat / memodifikasi ~ / .ssh / config . Perhatikan nilai 'Host' yang sedikit berbeda:
Langkah 3: ssh-add
Anda mungkin atau mungkin tidak perlu melakukan ini. Untuk memeriksa, daftarkan sidik jari identitas dengan menjalankan:
Jika entri Anda tidak ada maka jalankan:
Langkah 4: uji
Untuk menguji Anda telah melakukan ini dengan benar, saya sarankan pemeriksaan cepat berikut:
Perhatikan bahwa Anda harus mengubah nama host (github / work.github) tergantung pada kunci / identitas apa yang ingin Anda gunakan. Tapi sekarang kamu harus baik-baik saja! :)
sumber
Katakanlah
alice
adalah pengguna github.com, dengan 2 atau lebih repositori pribadirepoN
. Untuk contoh ini kita akan bekerja hanya dengan dua repositori bernamarepo1
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: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 Andaorigin
menjadi sesuatu seperti ini: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 "[email protected]"
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 kegithub.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
Untuk repo2
Dan kemudian, pada
.ssh/config
file Anda , sekarang Anda akan dapat memasukkan konfigurasi untuk setiap subdomain :)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.
sumber
.ssh/config
adalah langkah penting - terima kasih banyak untuk ituSaya memiliki 2 akun di github, dan inilah yang saya lakukan
linux
untuk membuatnya bekerja.Kunci
ssh-keygen
, beri nama dengan benar, sehingga memudahkan hidup.ssh-add path_to_private_key
Konfigurasi
~ / .ssh / config
Setel url jarak jauh untuk repo:
Untuk repo di Host
github-kc
:Untuk repo di Host
github-abc
:Penjelasan
Opsi dalam
~/.ssh/config
:Host
github- <identify_specific_user>Host dapat berupa nilai apa pun yang dapat mengidentifikasi host plus akun, itu tidak perlu menjadi host nyata, misalnya
github-kc
mengidentifikasi salah satu akun saya di github untuk laptop lokal saya,Saat mengatur url jarak jauh untuk git repo, ini adalah nilai yang harus dicari
git@
, itulah cara repo memetakan ke Host, mis.git remote set-url origin git@github-kc:kuchaguangjie/pygtrans.git
Host
]Hostname
tentukan nama host yang sebenarnya, cukup gunakan
github.com
untuk github,User
gitpengguna selalu
git
untuk github,IdentityFile
tentukan kunci yang akan digunakan, cukup letakkan jalur tersebut sebagai kunci publik,
LogLevel
tentukan level log untuk debug, jika ada masalah,
DEBUG3
berikan info paling detail.sumber
ssh-add path_to_private_key
- mungkin karena agen tidak diharuskan dalam kasus ini. File config secara eksplisit mendefinisikan jalur ke kunci.ssh-add
karena kunci Anda tidak dilindungi kata sandi atau (jika Anda menggunakan Mac) gantungan kunci OSX yang menanganinya untuk Anda.ssh-add
mencegah Anda dari keharusan memasukkan kata sandi setiap kali Anda mengakses kunci Anda.Gunakan
IdentityFile
parameter di~/.ssh/config
:sumber
Alternatif yang mungkin lebih sederhana untuk mengedit file konfigurasi ssh (seperti yang disarankan dalam semua jawaban lain), adalah mengonfigurasi repositori individual untuk menggunakan kunci ssh yang berbeda (misalnya non-default).
Di dalam repositori yang ingin Anda gunakan kunci yang berbeda, jalankan:
Dan pastikan, kunci Anda ditambahkan ke ssh-agent, dengan menjalankan:
Perlu diingat bahwa perintah di atas hanya akan menambahkan kunci ke ssh-agent untuk sesi Anda saat ini. Jika Anda ingin ini berfungsi selamanya, Anda harus "secara permanen" menambahkannya ke ssh-agent Anda. Misal inilah cara melakukannya untuk ubuntu dan di sini untuk OSX .
Seharusnya juga memungkinkan untuk skala pendekatan ini ke beberapa repositori menggunakan konfigurasi git global dan kondisional termasuk ( lihat contoh ).
sumber
Dalam kasus saya, tidak ada solusi di atas yang menyelesaikan masalah saya, tetapi ssh-agent tidak. Pada dasarnya, saya melakukan yang berikut:
Hasilkan pasangan kunci menggunakan ssh-keygen yang ditunjukkan di bawah ini. Ini akan menghasilkan pasangan kunci (dalam contoh ini
.\keyfile
dan.\keyfile.pub
)ssh-keygen -t rsa -b 4096 -C "yourname@yourdomain" -f keyfile
Unggah
keyfile.pub
ke penyedia gitps -ef | grep ssh-agent
untuk melihat apakah sudah berjalan)ssh-add .\keyfile
untuk menambahkan kredensialgit clone git@provider:username/project.git
sumber
Saya menghabiskan banyak waktu untuk memahami semua langkah. Jadi mari kita jelaskan langkah demi langkah:
ssh-keygen -t rsa
. Berikan alternatif sukaproj1.id_rsa
dan pukul tanpa ragu karena Anda tidak memerlukan kata sandi.Tambahkan bagian baru di
.ssh/config
:Pertimbangkan bagian pertama dan perhatikan bahwa
proj1.github.com
kami akan kembali ke bagian nanti.ssh-add ~/.ssh/proj1.id_rsa
proj1.github.com
(persis host dari file config).git clone [email protected]
.Tutorial yang bagus.
Jangan mengacaukan host
sumber
id_rsa_proj1
danproj1_id_rsa
harus benar-benar sama. Anda juga bisa menambahkan bagian tentang.git/config
pengaturan dari tutorial ke jawaban Anda.proj1.id_rsa
vs.proj1_id_rsa
Saya menggunakan,
Itu baik-baik saja wokred.
Gunakan pengaturan di atas dalam file .ssh / config Anda untuk kunci rsa yang berbeda untuk nama pengguna yang berbeda.
sumber
Sebagai pelengkap jawaban @stefano, Lebih baik menggunakan perintah
-f
ketika membuat kunci SSH baru untuk akun lain,Karena
id_rsa_work
file tidak ada di jalur~/.ssh/
, dan saya membuat file ini secara manual, dan itu tidak berfungsi :(sumber
Saya memposting teknik yang saya gunakan untuk menangani ini di sini
sumber