Beberapa akun github di komputer yang sama?

419

Mencoba untuk mengerjakan repo "kerja" saya yang sebenarnya, dan repo pribadi saya di hub git, dari komputer saya.

Akun kerja dibuat terlebih dahulu, dan semuanya bekerja dengan sempurna.

Akun pribadi saya, namun sepertinya tidak dapat mendorong ke repo pribadi saya, yang dibuat di bawah akun / email yang berbeda.

Saya sudah mencoba menyalin kunci kerja saya ke akun pribadi saya, tetapi itu menimbulkan kesalahan, karena tentu saja kunci hanya dapat dilampirkan ke satu akun.

Bagaimana saya bisa mendorong / menarik ke dan dari kedua akun, dari kredensial github masing-masing?

Kevin Whitaker
sumber
3
Langkah-langkah yang diberikan dalam tautan http://net.tutsplus.com/tutorials/tools-and-tips/how- to-work-with-github-and-multiple-accounts bekerja dengan baik untuk saya dan ujust untuk menambahkan satu hal yang Anda harus menambahkan Anda kunci repo pribadi juga menggunakan <br> & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> untuk memberitahu ssh-agent untuk memasukkannya untuk digunakan. <hr /> Rest berfungsi dengan baik untuk saya dengan tutorial yang disebutkan di atas.
Brut3e
2
"karena tentu saja kunci hanya dapat dilampirkan ke satu akun" tentu saja? Mengapa?
Sparr
Git 2.13 dan seterusnya mendukung conditional termasuk dalam .gitconfig yang merupakan cara yang berguna untuk mengelola identitas per hierarki folder. stackoverflow.com/a/36296990/901597
Joe Bowbeer
Kemungkinan duplikat dari Beberapa Akun GitHub & Konfigurasi SSH
Code-Apprentice

Jawaban:

275

Yang perlu Anda lakukan adalah mengonfigurasi pengaturan SSH Anda dengan beberapa keypairs SSH.

Juga, jika Anda bekerja dengan beberapa repositori menggunakan personas yang berbeda, Anda perlu memastikan bahwa repositori individual Anda memiliki pengaturan pengguna yang diganti:

Menyetel nama pengguna, email, dan token GitHub - Pengaturan utama untuk setiap repositori https://help.github.com/articles/setting-your-commit-email-address-in-git/

Semoga ini membantu.

Catatan: Beberapa dari Anda mungkin memerlukan email berbeda untuk digunakan untuk repositori yang berbeda, dari git 2.13 Anda dapat mengatur email berdasarkan direktori dengan mengedit file konfigurasi global yang ditemukan di: ~/.gitconfigmenggunakan kondisional seperti:

[user]
    name = Pavan Kataria
    email = [email protected]

[includeIf "gitdir:~/work/"]
    path = ~/work/.gitconfig

Dan kemudian konfigurasi khusus pekerjaan Anda ~ / work / .gitconfig akan terlihat seperti ini:

[user]
    email = [email protected]

Terima kasih @alexg karena memberi tahu saya tentang hal ini di komentar.

Pavan
sumber
4
Tautan ke-3 sekarang rusak (Beberapa Kunci SSH)
RustyTheBoyRobot
12
tautan pertama itu sekarang mengarahkan ulang ke halaman di akun Pengguna vs. organisasi (tidak yakin apakah itu yang awalnya dimaksudkan). tutorial ini mudah diikuti dan menyelesaikan masalah saya.
Eric H.
1
@Camilo Karena saya tidak tahu apa tautan baru yang diperbarui, jadi jika dia mengetahui tautan yang diperbarui, maka akan baik baginya untuk menghubungkannya :)
Pavan
4
@AlmasAdilbek Sudah hampir 3 tahun sekarang, tautan pasti akan rusak dan terus rusak. Ingin menemukan artikel alternatif atau menemukan sumber asli lagi sehingga Anda dapat membantu memperbarui tautan untuk saya sobat? Saya tidak bisa selamanya memperbaiki tautan yang rusak.
Pavan
3
Ini bukan jawaban tanpa merangkum langkah-langkah penting dalam posting Anda yang sebenarnya. Jawaban ini telah menderita dari pembusukan tautan sekali, tetapi belum membuat pembaruan yang diperlukan untuk memberikan jawaban yang sebenarnya untuk pertanyaan itu.
Terima kasih
139

Gunakan HTTPS:

ubah url jarak jauh ke https:

git remote set-url origin https://[email protected]/USERNAME/PROJECTNAME.git

dan Anda baik untuk pergi:

git push

Untuk memastikan bahwa komit muncul seperti yang dilakukan oleh USERNAME, seseorang dapat mengatur user.name dan user.email untuk proyek ini, juga:

git config user.name USERNAME
git config user.email [email protected]
Greg Leszek
sumber
8
Solusi paling sederhana untuk mengunduh cepat dari repositori pribadi lain.
Jaap Geurts
1
ini adalah solusi terbaik yang saya temukan di tumpukan
Harvinder Singh
Solusi ini menyediakan metode paling sederhana karena saya tidak ingin menambahkan lebih banyak kunci ssh. Hanya sebuah catatan, jika Anda sudah mengatur bendera Anda user.namedan user.emaildengan --global, lakukan saja apa yang dia katakan di atas untuk mengaturnya secara lokal untuk hanya satu repo. Itu memecahkan banyak masalah. Sekarang untuk menghapus repo lama ....
thatrobotguy
72

Menjadi bugar

Untuk mengelola repo git di bawah github / bitbucket / akun apa pun yang terpisah, Anda hanya perlu membuat kunci SSH baru.

Tetapi sebelum kita dapat mulai mendorong / menarik repo dengan identitas kedua Anda, kami harus membuat Anda menjadi bugar - Mari kita asumsikan sistem Anda diatur dengan pasangan kunci id_rsadan tipikal id_rsa.pub. Sekarang ini tree ~/.sshpenampilanmu seperti ini

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub

Pertama, beri nama pasangan kunci - menambahkan nama deskriptif akan membantu Anda mengingat kunci mana yang digunakan untuk pengguna / jarak jauh

# change to your ~/.ssh directory
$ cd ~/.ssh

# rename the private key
$ mv id_rsa github-mainuser

# rename the public key
$ mv id_rsa.pub github-mainuser.pub

Selanjutnya, mari kita buat pasangan kunci baru - di sini saya akan memberi nama kunci barugithub-otheruser

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser

Sekarang, ketika kita melihat, tree ~/.sshkita melihat

$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub

Selanjutnya, kita perlu mengatur ~/.ssh/configfile yang akan menentukan konfigurasi kunci kita. Kami akan membuatnya dengan izin pemilik-baca / tulis-saja yang tepat

$ (umask 077; touch ~/.ssh/config)

Buka itu dengan editor favorit Anda, dan tambahkan konten berikut

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

Agaknya, Anda akan memiliki beberapa repo yang ada yang terkait dengan identitas github utama Anda. Untuk alasan itu, github.com "default" Hostdisiapkan untuk menggunakan mainuserkunci Anda . Jika Anda tidak ingin memilih satu akun daripada yang lain, saya akan menunjukkan cara memperbarui repo yang ada di sistem Anda untuk menggunakan konfigurasi ssh yang diperbarui.


Tambahkan kunci SSH baru Anda ke github

Pergilah ke github.com/settings/keys untuk menambahkan kunci publik baru Anda

Anda bisa mendapatkan konten kunci publik menggunakan: salin / tempel ke github

$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...

Sekarang identitas pengguna baru Anda sudah siap - di bawah ini kami akan menunjukkan kepada Anda bagaimana menggunakannya.


Selesaikan semuanya: kloning repo

Jadi bagaimana ini bekerja bersama dengan git dan github? Nah, karena Anda tidak dapat memiliki ayam tanpa dan telur, kita akan melihat kloning repo yang ada. Situasi ini mungkin berlaku untuk Anda jika Anda memiliki akun github baru untuk tempat kerja Anda dan Anda ditambahkan ke proyek perusahaan.

Katakanlah github.com/someorg/somereposudah ada dan Anda ditambahkan - kloning semudah itu

$ git clone github.com-otheruser:someorg/somerepo.git

Yang tebal bagian harus cocok dengan Hostnama kita setup di Anda ~/.ssh/configberkas. Itu benar menghubungkan git ke yang sesuai IdentityFiledan benar mengotentikasi Anda dengan github


Selesaikan semuanya: membuat repo baru

Karena Anda tidak dapat memiliki ayam tanpa telur dan telur, kami akan melihat penerbitan repo baru di akun sekunder Anda. Situasi ini berlaku untuk pengguna yang membuat konten baru menggunakan akun github sekunder mereka.

Mari kita asumsikan Anda telah melakukan sedikit pekerjaan secara lokal dan sekarang Anda siap untuk mendorong ke github. Anda dapat mengikuti saya jika Anda mau

$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init

Sekarang konfigurasikan repo ini untuk menggunakan identitas Anda

$ git config user.name "Mister Manager"
$ git config user.email "[email protected]"

Sekarang buat komit pertama Anda

$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"

Periksa komit untuk melihat identitas baru Anda digunakan menggunakan git log

$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>

Baiklah, saatnya untuk mendorong ke github! Karena github belum tahu tentang repo baru kami, pertama pergi ke github.com/baru dan buat repo baru Anda - beri nama somerepo

Sekarang, untuk mengonfigurasi repo Anda ke "bicara" ke github menggunakan identitas / kredensial yang benar, kami telah menambahkan sebuah remote. Dengan asumsi nama pengguna github Anda untuk akun baru Anda adalah someuser...

$ git remote add origin github.com-otheruser:someuser/somerepo.git

Itu tebal bagian benar-benar penting dan itu harus sesuai dengan Hostyang kita didefinisikan dalam Anda ~/.ssh/configberkas

Terakhir, dorong repo

$ git push origin master

Perbarui repo yang ada untuk menggunakan konfigurasi SSH baru

Katakanlah Anda sudah memiliki beberapa repo yang dikloning, tetapi sekarang Anda ingin menggunakan konfigurasi SSH baru. Dalam contoh di atas, kami menjaga repo Anda yang ada tetap dalam kebijaksanaan dengan menetapkan pasangan id_rsa/ id_rsa.pubkunci sebelumnya ke Host github.comdalam file konfigurasi SSH Anda. Tidak ada yang salah dengan ini, tetapi saya memiliki setidaknya 5 konfigurasi github sekarang dan saya tidak suka menganggap salah satu dari mereka sebagai konfigurasi "default" - Saya lebih suka secara eksplisit tentang masing-masing.

Sebelum kita punya ini

Host github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

Jadi sekarang kami akan memperbarui itu ke ini (perubahan dicetak tebal )

Host github.com-mainuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-mainuser

Host github.com-otheruser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github-otheruser

Tetapi itu berarti bahwa sekarang repo yang ada dengan github.comremote tidak akan lagi berfungsi dengan file identitas ini. Tapi jangan khawatir, ini adalah perbaikan sederhana.

Untuk memperbarui repo yang ada untuk menggunakan konfigurasi SSH baru Anda, cukup buka file konfigurasi git repo dan perbarui url!

$ cd existingrepo
$ nano .git/config

Perbarui bidang asal jarak jauh (perubahan dicetak tebal )

[remote "origin"]
        url = github.com-mainuser:someuser/existingrepo.git
        fetch = +refs/heads/*:refs/remotes/origin/*

Itu dia. Sekarang Anda bisa push/ pullsesuka hati Anda


Izin file kunci SSH

Jika Anda mengalami masalah dengan kunci publik Anda tidak berfungsi dengan benar, SSH cukup ketat pada izin file yang diizinkan pada ~/.sshdirektori Anda dan file kunci yang sesuai

Sebagai aturan praktis, direktori apa pun seharusnya 700dan file apa pun harus 600- ini berarti hanya pemilik-baca / tulis-saja - tidak ada grup / pengguna lain yang dapat membaca / menulisnya

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub

Bagaimana saya mengelola kunci SSH saya

Saya mengelola kunci SSH yang terpisah untuk setiap host yang saya hubungkan, sehingga jika ada satu kunci yang pernah dikompromikan, saya tidak perlu memperbarui kunci di setiap tempat saya telah menggunakan kunci itu. Ini seperti ketika Anda mendapatkan pemberitahuan dari Adobe bahwa 150 juta informasi pengguna mereka dicuri - sekarang Anda harus membatalkan kartu kredit itu dan memperbarui setiap layanan yang bergantung padanya - sungguh merepotkan.

Begini ~/.sshtampilannya direktori saya : Saya punya satu .pemkunci untuk setiap pengguna, dalam folder untuk setiap domain yang saya hubungkan. Saya menggunakan .pemkunci jadi saya hanya perlu satu file per kunci.

$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│   ├── naomik.pem
│   ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│   ├── naomi.pem
├── somedomain.com
│   ├── someuser.pem
└── someotherdomain.org
    └── someuser.pem

Dan inilah /.ssh/configfile yang sesuai saya - jelas hal-hal github relevan untuk menjawab pertanyaan ini tentang github, tetapi jawaban ini bertujuan untuk membekali Anda dengan pengetahuan untuk mengelola identitas ssh Anda pada sejumlah layanan / mesin.

Host github.com-naomik
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/naomik.pem

Host github.com-someuser
  HostName github.com
  User git
  IdentityFile ~/.ssh/github.com/someusername.pem

Host naomi.makes.software
  User naomi
  IdentityFile ~/.ssh/naomi.makes.software/naomi.pem

Host somedomain.com
  HostName 162.10.20.30
  User someuser
  IdentityFile ~/.ssh/somedomain.com/someuser.pem

Host someotherdomain.org
  User someuser
  IdentityFile ~/.ssh/someotherdomain.org/someuser.pem

Mendapatkan kunci publik SSH Anda dari kunci PEM

Di atas Anda memperhatikan bahwa saya hanya memiliki satu file untuk setiap tombol. Ketika saya perlu memberikan kunci publik, saya hanya menghasilkan sesuai kebutuhan.

Jadi ketika github meminta kunci publik ssh Anda, jalankan perintah ini untuk mengeluarkan kunci publik ke stdout - salin / tempel di tempat yang diperlukan

$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...

Catatan, ini juga proses yang sama yang saya gunakan untuk menambahkan kunci saya ke mesin jarak jauh. The ssh-rsa AAAA...nilai disalin ke remote ~/.ssh/authorized_keysberkas


Mengonversi pasangan id_rsa/ id_rsa.pubkunci Anda ke format PEM

Jadi Anda ingin menjinakkan Anda file-file kunci dan mengurangi beberapa kesalahan sistem file? Mengubah pasangan kunci Anda menjadi PEM tunggal mudah

$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem

Atau, mengikuti contoh kami di atas, kami mengganti nama id_rsa -> github-mainuserdan id_rsa.pub -> github-mainuser.pub- jadi

$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem

Sekarang hanya untuk memastikan bahwa kami telah mengonversi ini dengan benar, Anda ingin memverifikasi bahwa kunci publik yang dihasilkan cocok dengan kunci publik lama Anda

# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==

Sekarang setelah Anda memiliki github-mainuser.pemfile Anda, Anda dapat menghapus file github-mainuserdan github-mainuser.pubfile lama Anda dengan aman - hanya file PEM yang diperlukan; cukup buat kunci publik kapan pun Anda membutuhkannya ^ _ ^


Membuat kunci PEM dari awal

Anda tidak perlu membuat pasangan kunci pribadi / publik dan kemudian mengonversi ke kunci PEM tunggal. Anda dapat membuat tombol PEM secara langsung.

Mari kita buat newuser.pem

$ openssl genrsa -out ~/.ssh/newuser.pem 4096

Mendapatkan kunci publik SSH adalah sama

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
Terima kasih
sumber
2
Saya mengerti ini adalah pertanyaan lama tapi itu tidak memaafkan kenyataan bahwa hampir setiap jawaban di sini bergantung pada tautan ke beberapa tutorial dan karenanya tunduk pada tautan yang membusuk. Tidak apa-apa untuk menautkan sumber / kutipan, tetapi Anda tidak dapat bersandar pada tautan jika Anda tidak merangkum bit-bit penting dalam jawaban Anda yang diposting di sini.
Terima kasih
Saya mengubah jawaban Anda yang luar biasa dan terperinci karena jelas cara yang tepat untuk melakukannya. Masalah saya dengannya adalah kompleksnya, dan setelah beberapa tahun menggunakan beberapa akun, saya mendapatkan yang baru, lalu tidak dapat mengingat bagaimana melakukannya dengan "cara yang benar". Cara saya di bawah ini sangat sederhana - saya hanya membuat 3 file baru dan satu skrip baru, dan saya baik-baik saja. Ini bekerja dengan sempurna bagi saya selama bertahun-tahun. Pembaca dapat memutuskan mana yang terbaik untuk mereka.
David H
David Saya menghargai ucapan itu. Jawabannya memang terasa rumit jika Anda menerimanya secara keseluruhan, tetapi pembaca benar-benar hanya perlu memperhatikan sebagian kecil dari jawabannya jika satu-satunya tujuan mereka adalah menambahkan satu identitas github lainnya - semua bagian yang tersisa dari jawabannya ditujukan untuk menyiapkan Anda dengan solusi yang kuat untuk mengelola kunci SSH secara umum, dan sepenuhnya opsional.
Terima kasih
Saya pikir git clone github.com-otheruser:someorg/somerepo.gitperlu git clone [email protected]:someorg/somerepo.git(menambahkan git@). Setidaknya, itulah yang saya butuhkan.
CommonsWare
@CommonsWare semua opsi baris perintah, seperti menentukan pengguna, dapat dilakukan dalam konfigurasi SSH juga. Misalnya: Host github.com(baris baru) User git(baris baru)IdentityFile ...
Terima kasih
24

Dengan membuat alias host yang berbeda untuk github.com di ~ / .ssh / config Anda, dan memberikan setiap host alias kunci ssh sendiri, Anda dapat dengan mudah menggunakan beberapa akun github tanpa kebingungan. Itu karena github.com membedakan bukan oleh pengguna, yang selalu hanya git, tetapi oleh kunci ssh yang Anda gunakan untuk terhubung. Cukup konfigurasikan asal remote Anda menggunakan alias host Anda sendiri. "

Ringkasan di atas adalah milik komentar di posting blog di bawah ini.

Saya telah menemukan penjelasan ini paling jelas. Dan itu bekerja untuk saya, setidaknya pada April 2012.

http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/

mishaba
sumber
1
Anda mungkin juga perlu menjalankan $ ssh-add ~/.ssh/id_rsa_COMPANY- lihat Kesalahan: Izin ditolak (publickey) - Dokumentasi Pengguna
Pat
22

Detail di http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ yang ditautkan oleh mishaba bekerja sangat baik untuk saya.

Dari halaman itu:

$ touch ~/.ssh/config

Kemudian edit file itu menjadi seperti ini (satu entri per akun):

#Default GitHub
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa

Host github-COMPANY
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_rsa_COMPANY
Matthew Skelton
sumber
8
saya juga akan mencatat bahwa "github.com" atau "github-COMPANY" perlu digunakan ketika melakukan klon (dan mungkin perintah lain) ingin git clone git@github-COMPANY/repo/name.gitmendapatkan kunci ssh yang benar.
hellatan
@dtan: Bagaimana saya menerapkan ini jika saya harus mengkloning https? git clone https://github-COMPANY/GitUserName/projectname.gitsepertinya tidak berfungsi. Kunci default menggunakan github.com berfungsi dengan baik.
Isaac Nequittepas
1
@IsaacRemuant, apakah Anda benar-benar harus menggunakan https? Setiap kali Anda ingin menarik / mendorong, Anda harus memasukkan kredensial pengguna Anda. akan lebih baik jika Anda bisa melakukan git: //github-COMPANY...projectname.git. apakah ada pesan kesalahan untuk panggilan https?
hellatan
@dtan: Saya punya beberapa masalah dengan port 22 meskipun tampaknya telah dibuka untuk saya. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. https adalah satu-satunya cara sejauh ini. $ git clone https://github-USER/UserName/test_project_user.git Cloning into test_project_user... error: Couldn't resolve host 'github-USER' while accessing https://github-USER/N UserName/test_project_user.git/info/refs fatal: HTTP request failed Saya tidak yakin apakah ini terkait dengan file konfigurasi atau cara saya mencoba meniru panggilan git Anda dengan https.
Isaac Nequittepas
Pada akhirnya, saya akan melakukan analisis mendalam mencoba segalanya dan mempostingnya dengan tepat sebagai pertanyaan.
Isaac Nequittepas
13
  • Pergi ke ~ / .ssh
  • Buat file dengan nama config (tidak memiliki ekstensi)
  • Buka file config & tambahkan kode di bawah ini. (ubah sesuai dengan akun Anda)

    1. Akun 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. Akun 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. Akun 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Tambahkan url jarak jauh sebagai berikut

    1. Akun 1

      git remote add origin [email protected]_1:group_name/repo_name.git
      
    2. Akun 2

      git remote add origin [email protected]:group_name/repo_name.git
      
    3. Akun 3

      git remote add origin github.com-Account3:github_username/repo_name.git
      

Pastikan nama IdentityFile sama dengan yang Anda buat selama pembuatan kunci ssh.

Pranav VR
sumber
Bisakah Anda jelaskan mengapa Anda menggunakan PreferredAuthentications publickey?
Oliver Pearmain
@OliverPearmain Di sini saya memberi tahu ssh bahwa metode pilihan kami untuk otentikasi adalah publickey. Anda dapat menggunakan kata sandi di PreferredAuthentications tetapi Anda mungkin harus memasukkan kata sandi untuk otentikasi.
Pranav VR
1
Menghargai balasan @Pranav VR, sepertinya saya ingin menggunakan yang sama :-)
Oliver Pearmain
11

Saya menggunakan skrip shell untuk mengalihkan saya ke akun apa pun yang saya ingin menjadi "aktif". Pada dasarnya Anda mulai dari awal yang baru, membuat satu akun dikonfigurasikan dengan benar dan berfungsi, kemudian pindahkan file-file ini ke nama dengan awalan yang tepat. Mulai saat itu Anda dapat menggunakan perintah "github", atau "gitxyz" untuk beralih:

# my github script
cd ~/.ssh

if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
    ; 
else 
    echo "Error: missing new files"
    exit 1
fi 

# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"

rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"

ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config

git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"        
git config --global github.token "whatever_it_is"

ssh-add -D

Saya sangat beruntung dengan ini. Saya juga membuat skrip run di Xcode (untuk Anda pengguna Mac) sehingga tidak akan membangun proyek saya kecuali saya memiliki pengaturan yang tepat (karena menggunakan git):

Jalankan Script yang ditempatkan setelah Dependensi (menggunakan / bin / ksh sebagai shell):

if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
    exit 1
fi

EDIT: menambahkan tes untuk keberadaan file baru dan menyalin file lama ke / tmp ke alamat komentar oleh @naomik di bawah ini.

David H
sumber
Hati-hati saat memposting salin dan tempel jawaban boilerplate / kata demi kata untuk beberapa pertanyaan, ini cenderung ditandai sebagai "spam" oleh komunitas. Jika Anda melakukan ini, biasanya itu berarti pertanyaannya adalah duplikat, jadi tandailah sebagai berikut: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev
1
Ini mimpi buruk. Jika seseorang menjalankan skrip ini sebelum memahami bahwa kunci id_rsadan id_rsa.pubkunci mereka akan dihapus, mereka bisa dikunci dari remote.
Terima kasih
@naomik memperbarui skrip untuk memeriksa file baru terlebih dahulu, dan untuk menyimpan file lama di / tmp
David H
10

Jawaban ini untuk pemula (bukan-git guru) . Saya baru-baru ini memiliki masalah ini dan mungkin itu hanya saya, tetapi sebagian besar jawaban tampaknya memerlukan pemahaman lebih lanjut tentang git. Setelah membaca beberapa jawaban stack overflow termasuk utas ini, berikut adalah langkah-langkah yang perlu saya ambil untuk beralih dengan mudah antara akun GitHub (mis. Asumsikan dua akun GitHub, github.com/personal dan gitHub.com/work ):

  1. Periksa kunci ssh yang ada: Buka Terminal dan jalankan perintah ini untuk melihat / mendaftarls -al ~/.ssh
    filekunci ssh yang adadengan ekstensi.pubadalah kunci ssh Anda sehingga Anda harus memiliki dua untukpersonaldanworkakun. Jika hanya ada satu atau tidak ada, saatnya untuk menghasilkan bijaksana lain lewati ini.

    - Membuat kunci ssh : masuk ke github (baik akun pribadi atau kantor), navigasikan ke Pengaturan dan salin email terkait.
    sekarang kembali ke Terminal dan jalankanssh-keygen -t rsa -C "the copied email", Anda akan melihat:

    Menghasilkan pasangan kunci publik / swasta.
    Masukkan file untuk menyimpan kunci (/.../.ssh/id_rsa):


    id_rsa adalah nama default untuk kunci ssh yang akan segera dihasilkan, jadi salin path dan ganti nama defaultnya, mis. /.../.ssh/id_rsa_workjika menghasilkan untuk akun kerja. berikan kata sandi atau cukup masukkan untuk mengabaikan dan, Anda akan membaca sesuatu seperti Gambar acak kunci adalah: dan gambar. selesai
    Ulangi langkah ini sekali lagi untuk akun github kedua Anda. Pastikan Anda menggunakan alamat email yang tepat dan nama kunci ssh yang berbeda (mis. Id_rsa_personal) untuk menghindari penulisan ulang.
    Pada tahap ini, Anda akan melihat dua kunci ssh saat dijalankan ls -al ~/.sshlagi.
  2. Kaitkan kunci ssh dengan akun gitHub: Langkah selanjutnya adalah menyalin salah satu kunci ssh, jalankan ini tetapi ganti nama kunci ssh Anda sendiri:, pbcopy < ~/.ssh/id_rsa_work.pubganti id_rsa_work.pubdengan apa yang Anda sebut milik Anda.
    Sekarang setelah kunci ssh kami disalin ke clipboard, kembali ke akun github [Pastikan Anda masuk ke akun kerja jika kunci ssh yang Anda salin id_rsa_work] dan arahkan ke
    Pengaturan - Kunci SSH dan GPG dan klik tombol kunci SSH Baru (bukan kunci GPG Baru btw: D)
    berikan beberapa judul untuk kunci ini, tempelkan kunci dan klik pada Tambahkan kunci SSH. Anda sekarang telah berhasil menambahkan kunci ssh atau memperhatikan itu telah ada di sana selama ini baik-baik saja (atau Anda mendapat kesalahan karena Anda memilih kunci GPG Baru alih - alihKunci SSH baru : D).
  3. Kaitkan kunci ssh dengan akun gitHub : Ulangi langkah di atas untuk akun kedua Anda.
  4. Edit konfigurasi global git: Langkah terakhir adalah memastikan file konfigurasi global mengetahui semua akun github (bisa dikatakan).
    Jalankan git config --global --edituntuk mengedit file global ini, jika ini membuka vim dan Anda tidak tahu bagaimana menggunakannya, tekan iuntuk masuk ke mode Insert, edit file seperti di bawah ini, dan tekan esc diikuti oleh :wquntuk keluar dari mode insert:

    [inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true

Selesai !, sekarang ketika mencoba mendorong atau menarik dari repo, Anda akan ditanya akun GitHub mana yang harus ditautkan dengan repo ini dan diminta hanya sekali, konfigurasi lokal akan mengingat tautan ini dan bukan konfigurasi global sehingga Anda dapat bekerja pada repo berbeda yang ditautkan dengan akun yang berbeda tanpa harus mengedit konfigurasi global setiap kali.

Lukas
sumber
Mereka seharusnya mengizinkan tag untuk jawaban, ini untuk mac OS.
user4015990
5

Perbaikan yang lebih sederhana dan mudah untuk menghindari kebingungan ..

Bagi pengguna Windows untuk menggunakan beberapa atau beberapa akun git untuk berbagai proyek.

Langkah-langkah berikut: Buka Control Panel dan Cari untuk Credential Manager. Kemudian Buka Manajer Kredensial -> Kredensial Windows

Sekarang hapus git: https // github.com node di bawah Judul Kredensial Generik

Ini akan menghapus kredensial saat ini. Sekarang Anda dapat menambahkan proyek apa pun melalui git pull, ia akan meminta nama pengguna dan kata sandi.

Ketika Anda menghadapi masalah dengan akun lain, lakukan proses yang sama.

Terima kasih

lihat gambar

Raja Shakir
sumber
4

baru saja menemukan ini untuk Windows, menggunakan kredensial untuk setiap repo:

cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
git remote set-url origin https://[email protected]/USERNAME/PROJECTNAME.git

Format kredensial. https://github.com . memberi tahu penolong kredensial URL untuk kredensial. 'UseHttpPath' memberi tahu manajer kredensial untuk menggunakan jalur untuk kredensial. Jika useHttpPath dihilangkan maka manajer kredensial akan menyimpan satu kredensial untuk https://github.com . Jika dimasukkan maka manajer kredensial akan menyimpan banyak kredensial, yang benar-benar saya inginkan.

Craig - MSFT
sumber
2

Saya menemukan permata ini sangat berguna: sshwitch

https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch

Ini membantu untuk mematikan kunci ssh. Ingatlah untuk mencadangkan semuanya terlebih dahulu!

Juga untuk memastikan bahwa komit memiliki alamat email yang benar terkait dengan mereka, saya memastikan bahwa file ~ / .gitconfig memiliki alamat email yang tepat.

agsdot
sumber
2

Selain membuat beberapa Kunci SSH untuk beberapa akun, Anda juga dapat mempertimbangkan untuk menambahkan kolaborator pada setiap proyek menggunakan email akun yang sama dan menyimpan kata sandi secara permanen.

#this store the password permanently
$ git config --global credential.helper wincred

Saya telah menyiapkan beberapa akun dengan email yang berbeda kemudian menempatkan pengguna dan email yang sama di setiap akun sebagai salah satu kolaborator. Dengan cara ini saya dapat mengakses semua akun tanpa menambahkan Kunci SSH, atau beralih ke nama pengguna lain, dan email untuk otentikasi.

Chetabahana
sumber
2

Pendekatan termudah dan langsung (IMHO) - tidak ada file konfigurasi tidak terlalu merepotkan

Cukup buat kunci ssh lainnya.

Katakanlah Anda memiliki akun GitHub baru, buat saja kunci baru untuk itu:

sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`

Sekarang Anda harus memiliki yang lama dan yang baru, untuk melihatnya, jalankan:

ls -al ~/.ssh

Anda hanya perlu menjalankan di atas sekali saja.

Mulai sekarang, setiap kali Anda ingin beralih di antara keduanya, jalankan saja:

ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub

Untuk beralih ke yang lama, jalankan lagi:

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>
Kohn1001
sumber
1

Cara lain yang lebih mudah adalah menggunakan beberapa aplikasi desktop, seperti apa yang saya lakukan, menggunakan akun A di desktop Github, saat menggunakan akun B di Github Kraken

Jet Yu
sumber
1

Jika Anda tidak ingin mengacaukan ~/.ssh/configfile yang disebutkan di sini, Anda bisa menjalankannya git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"di repo yang ingin Anda komit dari akun lain.

Sisa pengaturannya sama:

  1. Buat kunci SSH baru untuk akun kedua ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Masuk ke github dengan akun Anda yang lain, buka https://github.com/settings/keys , dan rekatkan konten~/.ssh/custom_id_rsa.pub

  3. Pastikan Anda menggunakan SSH alih-alih HTTPS sebagai url jarak jauh: git remote set-url origin [email protected]:upstream_project_teamname/upstream_project.git

thakis
sumber
0

Anda tidak harus memiliki dua akun berbeda untuk pribadi dan pekerjaan. Bahkan, Github Merekomendasikan Anda mempertahankan satu akun dan membantu Anda menggabungkan keduanya.

Ikuti tautan di bawah ini untuk bergabung jika Anda memutuskan tidak perlu memelihara beberapa akun.

https://help.github.com/articles/merging-multiple-user-accounts/

Eric Blair
sumber
0

Tidak seperti jawaban lain, di mana Anda perlu mengikuti beberapa langkah untuk menggunakan dua akun github yang berbeda dari mesin yang sama, bagi saya ini bekerja dalam dua langkah .

Anda hanya perlu:

1) menghasilkan pasangan kunci publik dan pribadi SSH untuk setiap akun Anda di bawah ~/.sshlokasi dengan nama dan berbeda

2) tambahkan kunci publik yang dihasilkan ke akun masing-masing di bawah Settings>> SSH and GPG keys>>New SSH Key .

Untuk membuat pasangan kunci publik dan pribadi SSH gunakan perintah berikut:

cd ~/.ssh
ssh-keygen -t rsa -C "[email protected]" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "[email protected]" -f "id_rsa_PERSONAL"

Sebagai hasil dari perintah di atas, id_rsa_WORKdan id_rsa_WORK.pubfile akan dibuat untuk akun kantor Anda (ex - git.work.com) dan id_rsa_PERSONALdan id_rsa_PERSONAL.pubakan dibuat untuk akun pribadi Anda (ex - github.com).

Setelah dibuat, salin konten dari setiap *.pubfile publik ( ) dan lakukan Langkah 2 untuk setiap akun.

PS : Tidak perlu membuat entri host untuk setiap akun git yang ada di ~/.ssh/configfile seperti disebutkan dalam jawaban lain, jika nama host dari dua akun Anda berbeda.

Sahil Chhabra
sumber
Bagaimana Anda beralih di antara dua akun di PC lokal Anda?
user4015990
1
Tidak perlu beralih. Setiap kali Anda mengkloning repo di lokal, info akun akan disimpan oleh git di repo lokal Anda. Jadi, setiap kali Anda melakukan git push atau tarik ke dalam repo lokal, konfigurasi di atas akan mendeteksi akun mana yang harus dipertimbangkan.
Sahil Chhabra
0

Jika Anda menginstal WSL, Anda dapat memiliki dua akun git yang terpisah - satu di WSL dan satu di windows.

Almenon
sumber
0

Anda harus dan tidak boleh mendorong ke proyek dengan beberapa kredensial yang sama. Setelah memulai pada mesin baru gunakan langkah-langkah berikut untuk menyiapkan dan menggunakan kredensial gitlab Anda dengan benar:

  • buat kunci ssh publik / privat pada mesin
  • salin tempelkan kunci publik ke antarmuka gitlab / github ui (siapa pun yang mengisyaratkan cara melakukannya melalui baris cmd mendapat bir gratis ...)
  • pastikan Anda mengkloning repo melalui git dan bukan url http
  • atur git alias untuk menghindari pengetikan awalan yang sama secara konstan ke perintah git
  • selama git commit SELALU menggunakan flag pembuat dan email
  • gunakan git seperti biasa Anda akan melakukannya

Semua ini sebagai berikut:

 # create the public / private key credentials on that specific machine
 ssh-keygen -t rsa -b 4096 -C "<<you>>@org.net" -f ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # setup your public key in the gitlab ui 
 cat ~/.ssh/id_rsa.<<you>>.`hostname -s`

 # make sure you clone the repo via the git and not http url
 git clone [email protected]:org/some-repo.git

 # set the git alias to avoid constant typing of the repeating prefix to the git cmd
 alias git='GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa.<<you>>.`hostname -s`" git'

 # during git commit ALWAYS use the author and e-mail flags
 git add --all ; git commit -nm "$git_msg" --author "YourFirstName YourLastName <[email protected]>"

 # use git as normal
 git fetch --all; git pull --all 
Yordan Georgiev
sumber
0
  1. Arahkan ke direktori tempat Anda ingin mendorong perubahan ke akun GitHub yang berbeda.
  2. Buat kunci SSH baru di terminal / baris perintah Anda.

    ssh-keygen -t rsa -C “your-email-address”

  3. Berikut ini akan ditampilkan:

    Menghasilkan pasangan kunci publik / swasta. Masukkan file untuk menyimpan kunci (/home/your_username/.ssh/id_rsa):

Salin dan tempel jalur diikuti oleh nama yang dapat diidentifikasi untuk file:

/home/your_username/.ssh/id_rsa_personal

4) Kemudian akan meminta Anda untuk hal berikut:

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

5) Sekarang Anda dapat mengetikkan perintah berikut untuk melihat semua kunci SSH yang Anda miliki di mesin lokal Anda:

ls -al ~/.ssh

Anda harus dapat melihat file kunci SSH baru Anda. Seperti yang dapat Anda lihat di akun saya, saya memiliki id_rsa_test dan id_rsa_personal.pub.

drwx------  2 gmadmin gmadmin 4096 Nov 16 22:20 .
drwxr-xr-x 42 gmadmin gmadmin 4096 Nov 16 21:03 ..
-rw-------  1 gmadmin gmadmin 1766 Nov 16 22:20 id_rsa_personal
-rw-r--r--  1 gmadmin gmadmin  414 Nov 16 22:20 id_rsa_personal.pub
-rw-r--r--  1 gmadmin gmadmin  444 Nov  6 11:32 known_hosts

6) Selanjutnya Anda perlu menyalin kunci SSH yang disimpan dalam file id_rsa_personal.pub. Anda dapat membuka ini di editor teks pilihan Anda. Saat ini saya menggunakan atom jadi saya membuka file menggunakan perintah berikut:

atom ~/.ssh/id_rsa_personal.pub

Anda kemudian akan mendapatkan sesuatu yang mirip dengan ini:

ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5 + ELtwsKkmcoeF3hNd7d6CjW + dWut83R / Dc01E / YzLc5ZFri18doOwuQoeBMpmjmjmdljrl

7) Salin ini dan navigasikan ke akun GitHub Anda → Pengaturan → Kunci SSH dan GPG 8) Klik pada kunci SSH Baru. Salin kunci, berikan judul dan tambahkan. 9) Tambahkan kunci dari terminal

ssh-add ~/.ssh/id_rsa_personal
Enter passphrase for /home/your_username/.ssh/id_rsa_personal: 

10) Konfigurasikan pengguna dan kata sandi.

git config --global user.name "gitusername"
git config --global user.email "gitemail"

11) Kami siap untuk berkomitmen dan mendorong sekarang.

git init
git add .
git commit 
git push
Shreya Sharma
sumber
0

Jika Anda telah membuat atau mengkloning repositori lain dan Anda tidak dapat menarik dari originatau upstreammenambahkan kunci ssh di direktori itu menggunakan perintah berikut ini berfungsi.

Ini kesalahan yang saya dapatkan di sini:

Warning: Permanently added the RSA host key for IP address '61:fd9b::8c52:7203' to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Saya menggunakan perintah berikut, ini berfungsi:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

Rishi Raj
sumber