Cara mengurus beberapa akaun GitHub pada satu mesin dengan kunci SSH

Keperluan untuk menguruskan beberapa akaun GitHub pada mesin yang sama muncul pada suatu ketika bagi kebanyakan pembangun. Setiap kali saya menukar Mac atau perlu menggunakan Git dengan akaun kerja baru, saya akhirnya melayari bagaimana sesuatu yang telah saya lakukan lebih daripada setengah lusin kali.

Kemalasan saya dalam tidak mendokumentasikan proses dan ketidakmampuan untuk mengingat langkah-langkahnya membuat saya menghabiskan banyak masa untuk mendapatkan potongan-potongan dari seluruh web dan kemudian entah bagaimana membuatnya berfungsi.

Saya pasti ada ramai di antara anda yang pernah ke sana, melakukannya dan banyak lagi di antara anda yang hanya menunggu masa yang sama berlaku (saya termasuk juga!). Usaha ini bertujuan untuk membantu kita semua.

1. Menghasilkan kekunci SSH

Sebelum membuat kunci SSH, kami dapat memeriksa untuk mengetahui apakah kami mempunyai kunci SSH yang ada: ls -al ~/.sshIni akan menyenaraikan semua pasangan kunci awam dan swasta yang ada, jika ada.

Sekiranya ~/.ssh/id_rsaada, kita boleh menggunakannya semula, atau kita boleh menjana kunci lalai terlebih dahulu ~/.ssh/id_rsadengan menjalankan:

ssh-keygen -t rsa

Apabila diminta lokasi untuk menyimpan kunci, terima lokasi lalai dengan menekan enter. Kunci peribadi dan kunci awam ~/.ssh/id_rsa.pubakan dibuat di lokasi ssh lalai ~/.ssh/.

Mari gunakan pasangan kunci lalai ini untuk akaun peribadi kami.

Untuk akaun kerja, kami akan membuat kunci SSH yang berbeza. Kod di bawah akan menghasilkan kunci SSH, dan menyimpan kunci awam dengan tanda "[email protected]_mail.com" ke~/.ssh/id_rsa_work_user1.pub

$ ssh-keygen -t rsa -C "[email protected]_mail.com" -f "id_rsa_work_user1" 

Kami mempunyai dua kunci berbeza yang dibuat:

~/.ssh/id_rsa ~/.ssh/id_rsa_work_user1

2. Menambah kunci SSH baru ke akaun GitHub yang sesuai

Kami sudah menyediakan kunci awam SSH, dan kami akan meminta akaun GitHub kami mempercayai kunci yang telah kami buat. Ini untuk menghilangkan keperluan untuk mengetik nama pengguna dan kata laluan setiap kali anda melakukan push Git.

Salin pbcopy < ~/.ssh/id_rsa.pub kunci awam dan kemudian log masuk ke akaun GitHub peribadi anda:

  1. Pergi ke Settings
  2. Pilih SSH and GPG keysdari menu ke kiri.
  3. Klik New SSH key, berikan tajuk yang sesuai, dan tampal kunci di kotak di bawah
  4. Klik Add key- dan anda sudah selesai!
Untuk akaun kerja, gunakan kunci awam ( pbcopy < ~/.ssh/id_rsa_work_user1.pub) yang sesuai dan ulangi langkah di atas dalam akaun kerja GitHub anda.

3. Mendaftarkan Kunci SSH baru dengan ejen ssh

Untuk menggunakan kunci, kita mesti mendaftarkannya dengan ejen ssh di mesin kita. Pastikan ssh-agent berjalan menggunakan arahan eval "$(ssh-agent -s)".

Tambahkan kunci ke ssh-agen seperti:

ssh-add ~/.ssh/id_rsa ssh-add ~/.ssh/id_rsa_work_user1

Jadikan ejen ssh menggunakan kekunci SSH masing-masing untuk Host SSH yang berbeza.

Ini adalah bahagian penting, dan kami mempunyai dua pendekatan yang berbeza:

Menggunakan fail konfigurasi SSH (Langkah 4), dan hanya mempunyai satu kunci SSH aktif dalam ejen ssh pada satu masa (Langkah 5).

4. Membuat Fail konfigurasi SSH

Di sini kita sebenarnya menambahkan peraturan konfigurasi SSH untuk host yang berbeza, yang menyatakan fail identiti yang akan digunakan untuk domain mana.

Fail konfigurasi SSH akan tersedia di ~ / .ssh / config .Edit jika ada, jika tidak, kita boleh membuatnya.

$ cd ~/.ssh/ $ touch config // Creates the file if not exists $ code config // Opens the file in VS code, use any editor

Buat entri konfigurasi untuk akaun GitHub yang berkaitan seperti yang terdapat di bawah dalam ~/.ssh/configfail anda :

# Personal account, - the default config Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa # Work account-1 Host github.com-work_user1 HostName github.com User git IdentityFile ~/.ssh/id_rsa_work_user1

" Work_user1 " adalah id pengguna GitHub untuk akaun kerja.

" G ithub.com- work_user1 " adalah notasi yang digunakan untuk membezakan beberapa akaun Git. Anda juga dapat menggunakan notasiwork_user1.g ithub.com” . Pastikan anda konsisten dengan notasi nama host yang anda gunakan. Ini relevan apabila anda mengklon repositori atau semasa anda menetapkan asal jauh untuk repositori tempatan

Konfigurasi di atas meminta ssh-agent untuk:

  • Gunakan id_rsa sebagai kuncinyauntuksebarang URL Git yang menggunakan @ github.com
  • Gunakan kunci id_rsa_work_user1 untuk mana-mana URL Git yang menggunakan @ github.com-work_user1

5. Satu kunci SSH aktif dalam ejen ssh pada satu masa

Pendekatan ini tidak memerlukan peraturan konfigurasi SSH. Sebaliknya kami secara manual memastikan bahawa ssh-agent hanya mempunyai kunci yang berkaitan yang dilampirkan pada masa operasi Git.

ssh-add -lakan menyenaraikan semua kunci SSH yang dilampirkan pada ejen ssh. Keluarkan semuanya dan tambahkan satu kunci yang akan anda gunakan.

Sekiranya ke akaun Git peribadi yang akan anda tolak:

$ ssh-add -D //removes all ssh entries from the ssh-agent $ ssh-add ~/.ssh/id_rsa // Adds the relevant ssh key

Ejen ssh kini mempunyai kunci yang dipetakan dengan akaun GitHub peribadi, dan kami dapat melakukan push Git ke repositori peribadi.

Untuk mendorong ke akaun GitHub-1 kerja anda, ubah kunci SSH yang dipetakan dengan ssh-agen dengan membuang kunci yang ada dan menambahkan kunci SSH yang dipetakan dengan akaun kerja GitHub.

$ ssh-add -D $ ssh-add ~/.ssh/id_rsa_work_user1

The ssh-agent at present has the key mapped with the work Github account, and you can do a Git push to the work repository. This requires a bit of manual effort, though.

Setting the git remote Url for the local repositories

Once we have local Git repositories cloned /created, ensure the Git config user name and email is exactly what you want. GitHub identifies the author of any commit from the email id attached with the commit description.

To list the config name and email in the local Git directory, do git config user.name and git config user.email. If it’s not found, update accordingly.

git config user.name "User 1" // Updates git config user name git config user.email "[email protected]"

6. While Cloning Repositories

Note: step 7 will help, if we have the repository already available on local.

Now that the configurations are in place, we can go ahead and clone the corresponding repositories. On cloning, make a note that we use the host names that we used in the SSH config.

Repositories can be cloned using the clone command Git provides:

git clone [email protected]:personal_account_name/repo_name.git

The work repository will require a change to be made with this command:

git clone [email protected]_user1:work_user1/repo_name.git

This change is made depending on the host name defined in the SSH config. The string between @ and : should match what we have given in the SSH config file.

7. For Locally Existing Repositories

If we have the repository already cloned:

List the Git remote of the repository, git remote -v

Check whether the URL matches our GitHub host to be used, or else update the remote origin URL.

git remote set-url origin [email protected]_user1:worker_user1/repo_name.git

Ensure the string between @ and : matches the Host we have given in the SSH config.

If you are creating a new repository on local:

Initialize Git in the project folder git init.

Create the new repository in the GitHub account and then add it as the Git remote to the local repository.

git remote add origin [email protected]_user1:work_user1/repo_name.git 

Ensure the string between @ and : matches the Host we have given in the SSH config.

Push the initial commit to the GitHub repository:

git add . git commit -m "Initial commit" git push -u origin master

We are done!

Adding or updating the Git remote of the local Git directory with the proper host will take care of selecting the correct SSH key to verify our identity with GitHub. With all the above in place, our git operations should work seamlessly.