Aynı bilgisayarda birden fazla github hesabı var mı?


418

Benim hem gerçek "iş" depolarım ve git hub'daki kişisel depolarımda bilgisayarımdan çalışmaya çalışıyorum.

Önce iş hesabı kuruldu ve her şey kusursuz bir şekilde çalışıyor.

Ancak kişisel hesabım, farklı bir hesap / e-posta altında kurulmuş olan kişisel repoma zorlanmıyor gibi görünüyor.

İş anahtarımı kişisel hesabıma kopyalamayı denedim, ancak bu bir hata veriyor, çünkü elbette bir anahtar sadece bir hesaba eklenebilir.

Her iki hesaba, ilgili github kimlik bilgilerinden nasıl ve onlardan nasıl alabilirim?


3
Http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts bağlantısında verilen Adımlar benim için iyi çalıştı ve size bir şey eklemeniz gerekiyor aynı zamanda <br> & nbsp; ssh-add ~/.ssh/id_rsa_COMPANY <br/> ssh-agent'a kullanım için eklemesini söyleyin.
Brut3e

2
"Tabii ki bir anahtar sadece bir hesaba eklenebilir" tabii ki? neden?
Sparr

Git 2.13 ve sonraki sürümler .gitconfig dosyasındaki klasör hiyerarşisi başına kimlikleri yönetmek için yararlı bir yol olan koşullu içerir. stackoverflow.com/a/36296990/901597
Joe Bowbeer

Yanıtlar:


275

Tek yapmanız gereken, SSH kurulumunuzu birden fazla SSH anahtar çifti ile yapılandırmaktır.

Ayrıca, farklı personaları kullanan birden çok havuzla çalışıyorsanız, bireysel depolarınızın kullanıcı ayarlarının buna göre geçersiz kılındığından emin olmanız gerekir:

Kullanıcı adı, e-posta ve GitHub belirteçini ayarlama - Tek tek depolar için ayarları geçersiz kılma https://help.github.com/articles/setting-your-commit-email-address-in-git/

Bu yardımcı olur umarım.

Not: Bazılarınız farklı depolar için farklı e-postaların kullanılmasını gerektirebilir, git 2.13'ten şu adreste bulunan genel yapılandırma dosyasını düzenleyerek e-postayı dizin bazında ayarlayabilirsiniz ~/.gitconfig:

[user]
    name = Pavan Kataria
    email = defaultemail@gmail.com

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

Ve sonra işe özgü yapılandırma ~ / work / .gitconfig şöyle görünecektir:

[user]
    email = pavan.kataria@company.tld

@Alexg, yorumlarda bana bunu bildirdiğiniz için teşekkür ederiz.


4
3. bağlantı kesildi (Çoklu SSH Anahtarları)
RustyTheBoyRobot

12
bu ilk bağlantı artık Kullanıcı ile kuruluş hesapları arasındaki bir sayfaya yönlendirilir (başlangıçta amaçlananın bu olup olmadığından emin değilim). bu öğretici takip etmek kolay oldu ve sorunlarımı çözdü.
Eric H.

1
@Camilo Yeni güncellenmiş bağlantının ne olduğunu bilmiyorum, bu yüzden güncellenmiş bağlantının farkındaysa, onu bağlaması iyi olurdu :)
Pavan

4
@AlmasAdilbek Neredeyse 3 yıl geçti, bağlantılar kopmak ve kopmaya devam etmek zorunda. Alternatif bir makale bulmaya veya orijinal kaynağı tekrar bulmaya dikkat edin, böylece bağlantıyı benim için yararlı bir şekilde güncelleyebilirsiniz dostum? Sonsuza kadar bozuk bağlantıları düzeltmeye devam edemem.
Pavan

3
Bu, gerçek postanızdaki kritik adımları özetlemeden bir cevap değildir. Bu cevap zaten bir kez bağlantı çürümesinden muzdaripti, ancak soruya gerçek bir cevap vermek için gerekli güncellemeyi yapmadı.
Teşekkürler

139

HTTPS kullanın:

uzak URL'yi https olarak değiştirin:

git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git

ve gitmekte fayda var:

git push

Kaydedilmesini olarak KULLANICI ADI, bir kutu kurulum tarafından gerçekleştirilen görünür olmasını sağlamak için user.name ve user.email çok bu proje için:

git config user.name USERNAME
git config user.email USERNAME@example.com

8
Başka bir özel depodan hızlı indirme için en basit çözüm.
Jaap Geurts

1
bu yığınlar üzerinde bulduğum en iyi çözüm
Harvinder Singh

Daha fazla ssh anahtarı eklemek istemediğim için bu çözüm en basit yöntemi sunuyor. Zaten senin ayarlarsanız Sadece bir nota user.nameve user.emailbirlikte --globalbayrak, sadece onun yalnızca söz konusu repo yerel olarak ayarlamak için yukarıdaki dediğini yap. Bu çok fazla sorun çözdü. Şimdi eski repo silmek için ....
thatrobotguy

72

Şekle girmek

Bir git repo'yu ayrı bir github / bitbucket / whatever hesabı altında yönetmek için yeni bir SSH anahtarı oluşturmanız yeterlidir.

Ancak ikinci kimliğinizle depoları itmeye / çekmeye başlamadan önce, sizi şekillendirmeliyiz - Sisteminizin tipik id_rsave id_rsa.pubanahtar bir çiftle kurulduğunu varsayalım . Şu an tree ~/.sshböyle görünüyorsun

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

İlk olarak, bu anahtar çiftini adlandırın - açıklayıcı bir ad eklemek , hangi kullanıcı / uzaktan kumanda için hangi anahtarın kullanıldığını hatırlamanıza yardımcı olacaktır.

# 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

Sonra, yeni bir anahtar çifti oluşturalım - burada yeni anahtarı adlandıracağımgithub-otheruser

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

Şimdi, tree ~/.sshbaktığımızda görüyoruz

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

Ardından, ~/.ssh/configanahtar yapılandırmalarımızı tanımlayacak bir dosya ayarlamamız gerekiyor . Bunu, doğru sahip-okuma / salt okunur izinleriyle oluşturacağız

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

Bunu favori düzenleyicinizle açın ve aşağıdaki içerikleri ekleyin

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

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

Muhtemelen, birincil github kimliğinizle ilişkili mevcut depolarınız olacaktır. Bu nedenle, "default" github.com anahtarınızı Hostkullanacak şekilde ayarlanmıştır mainuser. Bir hesabı diğerine tercih etmek istemiyorsanız, güncellenmiş bir ssh yapılandırması kullanmak için sisteminizdeki mevcut depoları nasıl güncelleyeceğinizi göstereceğim .


Yeni SSH anahtarınızı github'a ekleyin

Yeni ortak anahtarınızı eklemek için github.com/settings/keys adresine gidin .

Ortak anahtar içeriğini aşağıdakileri kullanarak alabilirsiniz: github'a kopyala / yapıştır

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

Artık yeni kullanıcı kimliğiniz ayarlandı - aşağıda nasıl kullanılacağını göstereceğiz.


İşleri yapma: bir repoyu klonlama

Peki bu git ve github ile çalışmak için nasıl bir araya geliyor? Olmadan bir tavuk ve yumurta alamayacağınız için, mevcut bir repoyu klonlamaya bakacağız. İşyeriniz için yeni bir github hesabınız varsa ve bir şirket projesine eklenmişseniz, bu durum sizin için geçerli olabilir.

Diyelim ki github.com/someorg/somerepozaten var ve ona eklendiniz - klonlama kadar kolay

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

Yani kalın kısım gerekir maç Hostsenin ad biz kurulum ~/.ssh/configdosyası. Git'i karşılık gelene doğru bağlar IdentityFileve sizi github ile doğru bir şekilde doğrular


İşlerinizi yapma: yeni bir repo oluşturma

Olmadan bir tavuk ve yumurta alamayacağınız için, ikincil hesabınızda yeni bir repo yayınlamaya bakacağız. Bu durum , ikincil github hesaplarını kullanarak yeni içerik oluşturan kullanıcılar için geçerlidir .

Diyelim ki yerel olarak zaten küçük bir iş yaptınız ve şimdi github'a zorlamaya hazırsınız. İsterseniz benimle birlikte takip edebilirsiniz

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

Şimdi bu repoyu kimliğinizi kullanacak şekilde yapılandırın

$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"

Şimdi ilk taahhüdünü yap

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

Git log'u kullanarak yeni kimliğinizin kullanıldığını görme taahhüdünü kontrol edin

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

Pekala, github'a gitme zamanı! Github yeni repo'mızı henüz bilmediğinden, ilk önce github.com/new adresine gidin ve yeni repo'nuzu oluşturun - somerepo olarak adlandırın

Şimdi, repo'nuzu doğru kimlik / kimlik bilgilerini kullanarak github ile "konuşacak" şekilde yapılandırmak için bir uzaktan kumanda ekledik. Yeni hesabınız için github kullanıcı adınızın someuser...

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

Yani kalın kısım kesinlikle kritik olduğunu ve gereken maç Hostbiz tanımlanan bu ~/.ssh/configdosyada

Son olarak, repoyu itin

$ git push origin master

Yeni bir SSH yapılandırması kullanmak için mevcut bir depoyu güncelleme

Diyelim ki bazı kopyalarınız var, ancak şimdi yeni bir SSH yapılandırması kullanmak istiyorsunuz. Yukarıdaki örnekte, önceki id_rsa/ id_rsa.pubanahtar çiftinizi Host github.comSSH yapılandırma dosyanıza atayarak mevcut depolarınızı incelerdik . Bu konuda yanlış bir şey yok, ama şimdi en az 5 github yapılandırması var ve bunlardan birini "varsayılan" yapılandırma olarak düşünmekten hoşlanmıyorum - her biri hakkında açık olmayı tercih ederim.

Bunu yapmadan önce

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

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

Şimdi bunu buna güncelleyeceğiz ( kalın harflerle değişiklikler )

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

Ancak bu, github.comuzaktan kumandayla mevcut herhangi bir repo'nun artık bu kimlik dosyasıyla çalışmayacağı anlamına gelir . Ama endişelenme, basit bir düzeltme.

Mevcut SSP'yi yeni SSH yapılandırmanızı kullanacak şekilde güncellemek için, deponun git config dosyasını açın ve url'yi güncelleyin!

$ cd existingrepo
$ nano .git/config

Uzak kaynak alanını güncelleyin ( kalın yazılan değişiklikler )

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

Bu kadar. Artık yapabilirsiniz push/ pullkalbinizin içeriğine


SSH anahtar dosyası izinleri

Ortak anahtarlarınızın düzgün çalışmamasıyla sorun yaşıyorsanız, SSH, dizininizde ve ilgili anahtar dosyalarınızda izin verilen dosya izinlerine oldukça katıdır~/.ssh

Genel bir kural olarak, herhangi bir dizin olmalı 700ve herhangi bir dosya olmalıdır 600- bu onların sahibi tarafından okunan / salt okunur oldukları anlamına gelir - başka hiçbir grup / kullanıcı bunları okuyamaz / yazamaz

$ 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

SSH anahtarlarımı nasıl yönetirim

Bağlandığım her ana bilgisayar için ayrı SSH anahtarları yönetiyorum, böylece herhangi bir anahtarın güvenliği ihlal edilirse, o anahtarı kullandığım diğer her yerdeki anahtarları güncellemem gerekmez. Bu, Adobe'den 150 milyon kullanıcı bilgisinin çalındığı bildirimini aldığınızda olduğu gibidir - şimdi bu kredi kartını iptal etmeli ve ona bağlı olan her hizmeti güncellemelisiniz - ne sıkıntı.

İşte ~/.sshdizinim şöyle görünüyor: .pemBağlandığım her etki alanı için bir klasörde, her kullanıcı için bir anahtarım var . .pemAnahtarları kullanmak için anahtar başına sadece bir dosyaya ihtiyacım var .

$ 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

Ve işte benim karşılık gelen /.ssh/configdosya - açıkçası github şeyler github hakkında bu soruyu cevaplamakla ilgilidir, ancak bu cevap size ssh kimliklerinizi herhangi bir sayıda hizmet / makinede yönetme bilgisiyle donatmayı amaçlamaktadır.

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

SSH genel anahtarınızı bir PEM anahtarından alma

Fark Üstü sadece sahip olduğu bir her anahtar için dosyayı. Bir ortak anahtar sağlamam gerektiğinde, sadece gerektiği gibi üretiyorum .

Github ssh ortak anahtarınızı istediğinde, ortak anahtarı stdout'a göndermek için bu komutu çalıştırın - gerektiğinde kopyala / yapıştır

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

Bu, anahtarımı herhangi bir uzak makineye eklemek için kullandığım işlemle aynı işlem olduğunu unutmayın. ssh-rsa AAAA...Değer Kumandanın kopyalanır ~/.ssh/authorized_keysdosyanın


Senin dönüştürme id_rsa/ id_rsa.pubPEM formatına anahtar çiftlerini

Yani size anahtar dosyaları evcilleştirmek ve bazı dosya sistemi cruft kısmak istiyorsun? Anahtar çiftinizi tek bir PEM'e dönüştürmek kolaydır

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

Veya yukarıdaki örneklerimizle birlikte yeniden adlandırdık id_rsa -> github-mainuserve id_rsa.pub -> github-mainuser.pub- yani

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

Şimdi, bunu doğru şekilde dönüştürdüğümüzden emin olmak için, oluşturulan genel anahtarın eski genel anahtarınızla eşleştiğini doğrulamak isteyeceksiniz.

# 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==

Artık github-mainuser.pemdosyanız var, eski github-mainuserve github-mainuser.pubdosyalarınızı güvenle silebilirsiniz - sadece PEM dosyası gereklidir; sadece ihtiyaç duyduğunuzda ortak anahtarı oluşturun ^ _ ^


Sıfırdan PEM anahtarları oluşturma

Özel / genel anahtar çiftini oluşturmanız ve ardından tek bir PEM anahtarına dönüştürmeniz gerekmez . PEM anahtarını doğrudan oluşturabilirsiniz.

Hadi bir newuser.pem

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

SSH genel anahtarını almak aynı

$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==

2
Bunun eski bir soru olduğunu anlıyorum, ancak buradaki hemen hemen her cevabın bazı öğreticilere bir bağlantı olduğu ve bu nedenle bağlantı çürümesine tabi olduğu gerçeğini mazur göstermez. Kaynakları / alıntıları bağlamak iyidir, ancak burada gönderilen cevabınızdaki kritik bitleri özetlemezseniz bir bağlantıya dayanamazsınız.
Teşekkürler

Mükemmel ve ayrıntılı cevabınızı açıkça doğru şekilde yapmanın yolu olarak onayladım. Benim sorunum onun karmaşık, ve birkaç yıl kullandıktan sonra bazı hesaplar, ben yeni bir tane almak, sonra hatırlamıyorum nasıl "doğru şekilde". Aşağıdaki yolum çok basit - sadece 3 yeni dosya ve bir yeni komut dosyası oluşturuyorum ve gitmekte iyiyim. Yıllarca benim için kusursuz çalıştı. Okuyucular onlar için neyin en iyi olduğuna karar verebilirler.
David H

DavidH Açıklamayı takdir ediyorum. Bir bütün olarak alırsanız cevap karmaşık hissettirir, ancak tek amacı başka bir github kimliği eklemek için okuyucunun gerçekten sadece küçük bir kısmı ile ilgilenmesi gerekir. yanıt, genel olarak SSH anahtarlarını yönetmek için sağlam bir çözüm oluşturmayı amaçlamaktadır ve tamamen isteğe bağlıdır.
Teşekkürler

Bence (ekleyerek ) git clone github.com-otheruser:someorg/somerepo.gitolması gerekiyor . Leastways, ihtiyacım olan buydu. git clone git@github.com-otheruser:someorg/somerepo.gitgit@
CommonsWare

Kullanıcıyı belirtmek gibi tüm komut satırı seçenekleri SSH yapılandırmasında da yapılabilir. Örneğin: Host github.com(newline) User git(newline)IdentityFile ...
Teşekkür ederim

24

~ / .Ssh / config dosyasında github.com için farklı ana bilgisayar diğer adları oluşturarak ve her ana bilgisayar diğer adına kendi ssh anahtarını vererek, karışıklık olmadan birden fazla github hesabını kolayca kullanabilirsiniz. Bunun nedeni, github.com'un her zaman sadece git değil, bağlanmak için kullandığınız ssh anahtarı tarafından kullanıcı tarafından ayırt edilmesidir. Uzak ana bilgisayarlarınızı kendi ana bilgisayar takma adlarınızı kullanarak yapılandırın. ”

Yukarıdaki özet, aşağıdaki blog yayınındaki yorumların izniyle kullanılmıştır.

Bu açıklamayı en açık buldum. Ve en azından Nisan 2012 itibariyle benim için çalışıyor.

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


1
Muhtemelen koşmanız gerekecek $ ssh-add ~/.ssh/id_rsa_COMPANY - Hataya
Pat

22

Mishaba ile bağlantılı http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ adresindeki ayrıntılar benim için çok iyi çalışıyor.

Bu sayfadan:

$ touch ~/.ssh/config

Ardından bu dosyayı şu şekilde düzenleyin (hesap başına bir giriş):

#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

8
Ayrıca "github.com" veya "github-COMPANY" git clone git@github-COMPANY/repo/name.gitdoğru bir ssh anahtarı almak gibi bir klon (ve muhtemelen diğer komutlar) yaparken kullanılması gerektiğini unutmayın .
hellatan

@dtan: https üzerinden klonlamak zorunda kalırsam bunu nasıl uygulayabilirim? git clone https://github-COMPANY/GitUserName/projectname.gitçalışmıyor gibi görünüyor. Github.com kullanan varsayılan anahtar gayet iyi çalışıyor.
Isaac Nequittepas

1
@IsaacRemuant, kesinlikle https üzerinden geçmek zorunda mısın? Çekmek / itmek istediğiniz her zaman kullanıcı kimlik bilgilerinizi girmeniz gerekir. git: //github-COMPANY...projectname.git yapabilseniz iyi olur. https çağrısı için herhangi bir hata mesajı var mı?
hellatan

@dtan: Görünüşe göre benim için açılmış olmasına rağmen port 22 ile ilgili bazı sorunlar yaşadım. ssh: connect to host github.com port 22: Bad file number fatal: The remote end hung up unexpectedly. https şimdiye kadar tek yoluydu. $ 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 Yapılandırma dosyasıyla veya https ile git çağrınızı taklit etmeye çalıştığım yolla ilgili olup olmadığından emin değilim.
Isaac Nequittepas

Nihayetinde, her şeyi deneyerek derinlemesine bir analiz yapacağım ve uygun bir soru olarak göndereceğim.
Isaac Nequittepas

13
  • ~ / .Ssh adresine gidin
  • Config adlı bir dosya oluşturun (uzantısı yok)
  • Yapılandırma dosyasını açın ve aşağıdaki kodları ekleyin. (hesabınıza göre değiştirin)

    1. Hesap 1

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

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

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Uzak URL'yi aşağıdaki gibi ekleyin

    1. Hesap 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. Hesap 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. Hesap 3

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

IdentityFile adlarının ssh anahtarı oluşturma sırasında oluşturduğunuz adlarla aynı olduğundan emin olun.


Neden kullandığınızı açıklar PreferredAuthentications publickeymısınız?
Oliver Pearmain

@OliverPearmain Burada ssh'a kimlik doğrulama için tercih ettiğimiz yöntemin publickey olduğunu söylüyorum. PreferredAuthentications uygulamasında parola kullanabilirsiniz, ancak kimlik doğrulama için parola girmeniz gerekebilir.
Pranav VR

1
Cevabı takdir @Pranav VR, aynı kullanmak istiyorum gibi geliyor :-)
Oliver Pearmain

11

"Aktif" olmak istediğim herhangi bir hesaba geçmek için kabuk komut dosyaları kullanıyorum. Esasen yeni bir başlangıçtan başlarsınız, bir hesap doğru şekilde yapılandırılır ve çalışır hale gelir, ardından bu dosyaları uygun önekle bir ada taşıyabilirsiniz. O andan itibaren geçiş yapmak için "github" veya "gitxyz" komutunu kullanabilirsiniz:

# 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

Bu konuda büyük şansım oldu. Ayrıca Xcode (sizin Mac kullanıcıları için) bir çalışma komut dosyası yarattı, bu yüzden (çünkü onun git kullanarak) uygun ayarı olmadıkça benim proje oluşturmak olmaz:

Bağımlılıklardan sonra yerleştirilen Komut Dosyasını Çalıştır (kabuk olarak / bin / ksh kullanarak):

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

EDIT: yeni dosyaların varlığı için testler ekledi ve aşağıdaki dosyaları @naomik tarafından yapılan açıklamaya yönelik eski dosyaları / tmp'ye kopyalayın.


Birden fazla soruya kopyala ve yapıştır levhası / kelimesi kelimesine yanıtlar gönderirken dikkatli olun, bunlar topluluk tarafından "spam" olarak işaretlenir. Bunu yapıyorsanız, bu genellikle soruların kopyaları olduğu anlamına gelir, bu yüzden onları şu şekilde işaretleyin: stackoverflow.com/questions/7548158 , stackoverflow.com/questions/3225862 , stackoverflow.com/questions/7924937
Kev

1
Bu bir kabus. Birisi id_rsave id_rsa.pubanahtarlarının silineceğini anlamadan önce bu komut dosyasını çalıştırırsa , uzaktan kumandadan kilitlenebilir.
Teşekkürler

@naomik, önce yeni dosyaları kontrol etmek ve / tmp içindeki eski dosyaları kaydetmek için komut dosyasını güncelledi
David H

10

Bu cevap yeni başlayanlar içindir (none-git gurus) . Geçenlerde bu sorun vardı ve belki de sadece ben ama cevapların çoğu git oldukça önceden anlayış gerektiriyor gibiydi. Bu iş parçacığı da dahil olmak üzere birkaç yığın taşması yanıtını okuduktan sonra, GitHub hesapları arasında kolayca geçiş yapmak için atmam gereken adımlar şunlardır (örneğin, iki GitHub hesabının, github.com/personal ve gitHub.com/work olduğunu varsayalım ):

  1. Mevcut ssh anahtarlarını kontrol edin: Terminal'i açın ve mevcut ssh anahtarlarıls -al ~/.ssh
    uzantısına sahip dosyalarıgörmek / listelemek için bu komutu çalıştırın.pub, ssh anahtarlarınızdır, bu nedenlepersonalveworkhesaplarıiçin iki tane olmalıdır. Sadece bir veya hiç yoksa, başka akıllıca üretme zamanı bunu atlayın.

    - ssh anahtarı oluşturma : github'a (kişisel veya iş acc.) Giriş yapın, Ayarlar'a gidinve ilişkili e-postayı kopyalayın.
    şimdi Terminal'e geri dönün ve çalıştırınssh-keygen -t rsa -C "the copied email", göreceksiniz:

    Genel / özel rsa anahtar çifti oluşturuluyor.
    Anahtarın kaydedileceği dosyayı girin (/.../.ssh/id_rsa):


    id_rsa , yakında oluşturulacak ssh anahtarının varsayılan adıdır, böylece yolu kopyalayın ve varsayılanı yeniden adlandırın, örn. /.../.ssh/id_rsa_workiş hesabı oluşturuyorsa. bir şifre girin veya yoksaymak için girin ve anahtarın randomart görüntüsü: ve görüntüsü gibi bir şey okuyacaksınız . yapılır.
    İkinci github hesabınız için bu adımı bir kez daha tekrarlayın. Üzerine yazmayı önlemek için doğru e-posta adresini ve farklı bir ssh anahtar adı (örn. İd_rsa_personal) kullandığınızdan emin olun.
    Bu aşamada, ls -al ~/.sshtekrar çalışırken iki ssh tuşu görmelisiniz .
  2. Ssh anahtarını gitHub hesabı ile ilişkilendirin: Sonraki adım, ssh anahtarlarından birini kopyalamak, bunu çalıştırmak, ancak kendi ssh anahtar adınızı pbcopy < ~/.ssh/id_rsa_work.pubdeğiştirmektir :, kendi adınızla değiştirin id_rsa_work.pub.
    Şimdi ssh anahtarımız panoya kopyalandı, github hesabına geri dönün [Kopyaladığınız ssh anahtarı ise iş hesabına giriş yaptığınızdan emin olun id_rsa_work] ve
    Ayarlar - SSH ve GPG Anahtarları'na gidin ve Yeni SSH anahtar düğmesine tıklayın ( Yeni GPG anahtarı btw: D değil)
    bu anahtar için bir başlık verin, anahtarı yapıştırın ve SSH anahtarı ekle'yi tıklayın. Artık bunlardan başarıyla ssh anahtarı eklenebilir veya fark ettik hangi boyunca ince olduğu tüm olmuştur (veya seçtiğiniz çünkü hata oluşması Yeni GPG anahtar yerineYeni SSH anahtarı : D).
  3. Ssh anahtarını gitHub hesabıyla ilişkilendir : İkinci adımı için yukarıdaki adımı tekrarlayın.
  4. Global git yapılandırmasını düzenleyin: Son adım, global yapılandırma dosyasının tüm github hesaplarından haberdar olmasını sağlamaktır (örneğin). Bu genel dosyayı düzenlemek için
    çalıştırın git config --global --edit, eğer vim açılırsa ve nasıl kullanılacağını bilmiyorsanız, iEkle moduna girmek için tuşuna basın , dosyayı aşağıdaki gibi düzenleyin ve :wqekleme modundan çıkmak için esc tuşuna ve ardından tuşuna basın :

    [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

Tamamlandı !, şimdi bir repoyu itmeye veya çekmeye çalışırken, hangi GitHub hesabının bu repoya bağlanması gerektiği sorulur ve sadece bir kez sorulur, böylece çalışabilmeniz için yerel yapılandırma bu bağlantıyı hatırlar her seferinde genel yapılandırmayı düzenlemek zorunda kalmadan farklı hesaplarla bağlantılı farklı depolarda.


Cevaplar için etiketlere izin vermelidirler, bu mac OS için.
user4015990

5

Karışıklığı önlemek için daha basit ve kolay düzeltme ..

Windows kullanıcılarının farklı projeler için birden çok veya farklı git hesabı kullanması.

Aşağıdaki adımlar: Denetim Masası'na gidin ve Kimlik Bilgisi Yöneticisi'ni arayın. Ardından Kimlik Bilgisi Yöneticisi -> Windows Kimlik Bilgileri'ne gidin

Şimdi Genel Kimlik Bilgileri başlığı altındaki git: https // github.com düğümünü kaldırın

Bu, geçerli kimlik bilgilerini silecektir. Şimdi git pull ile herhangi bir proje ekleyebilirsiniz kullanıcı adı ve şifre isteyecektir.

Başka bir hesapla ilgili herhangi bir sorunla karşılaştığınızda da aynı işlemi yapın.

Teşekkürler

resme bakın


4

her depo için kimlik bilgilerini kullanarak Windows için bunu anladım:

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://USERNAME@github.com/USERNAME/PROJECTNAME.git

Kimlik bilgilerinin biçimi. https://github.com . kimlik bilgisi yardımcısına kimlik bilgisinin URL'sini bildirir. 'UseHttpPath' kimlik bilgisi yöneticisine kimlik bilgisinin yolunu kullanmasını söyler. UseHttpPath atlanırsa, kimlik bilgisi yöneticisi https://github.com için bir kimlik bilgisi depolar . Dahil edilirse, kimlik bilgisi yöneticisi birden çok kimlik bilgisini depolar, ki bu gerçekten istediğim şeydi.



2

Birden çok hesap için birden fazla SSH Anahtarı oluşturmanın yanı sıra , aynı hesap e-postalarını kullanarak her bir projeye ortak çalışan eklemeyi ve şifreyi kalıcı olarak depolamayı da düşünebilirsiniz .

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

Farklı e-postaları olan birden çok hesap ayarladım, ardından ortak çalışanlardan biriyle aynı hesaba ve e-postayı her hesaba koydum. Bu şekilde, SSH Anahtarı eklemeden veya başka bir kullanıcı adına ve kimlik doğrulama için e-postaya geçmeden tüm hesaba erişebilirim.


2

En kolay ve anlaşılır yaklaşım (IMHO) - yapılandırma dosyaları çok fazla güçlük çekmiyor

Sadece başka bir ssh anahtarı oluşturun.

Diyelim ki yeni bir iş GitHub hesabınız var, bunun için yeni bir anahtar oluşturun:

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

Şimdi onları görmek için eskisine ve yenisine sahip olmalısınız:

ls -al ~/.ssh

Yukarıdakileri sadece bir kez çalıştırmanız gerekir.

Şu andan itibaren, ikisi arasında her geçiş yapmak istediğinizde şunu çalıştırın:

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

Eskisine geçiş yapmak için tekrar çalıştırın:

 ssh-add -D
 ssh-add ~/.ssh/<previous id_rsa>

1

başka bir kolay yol ise Github Kraken'da B hesabını kullanırken yaptığım gibi Github masaüstünde A hesabını kullanmak gibi birden çok masaüstü uygulaması kullanmaktır



1

~/.ssh/configBurada belirtilen dosya ile uğraşmak istemiyorsanız , bunun yerinegit config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa" uğraşmak istemiyorsanız, farklı bir hesaptan işlem yapmak istediğiniz repoda .

Kurulumun geri kalanı aynı:

  1. İle ikinci hesap için yeni bir SSH anahtarı oluşturun ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Diğer hesabınızla github'da oturum açın, https://github.com/settings/keys adresine gidin ve içeriğini yapıştırın~/.ssh/custom_id_rsa.pub

  3. Uzak URL olarak HTTPS yerine SSH kullandığınızdan emin olun: git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git



0

Aynı makineden iki farklı github hesabı kullanmak için birkaç adım izlemeniz gereken diğer cevapların aksine , benim için iki adımda çalıştı .

Tek yapmanız gereken:

1) altında hesabınızın her biri için SSH genel ve özel anahtar çifti oluşturun~/.ssh farklı adlara sahip konum ve

2) oluşturulan genel anahtarları >> >> altında ilgili hesaba ekleyinSettingsSSH and GPG keysNew SSH Key .

Oluşturmak için SSH genel ve özel anahtar çiftleri aşağıdaki kullanın komutu:

cd ~/.ssh
ssh-keygen -t rsa -C "email@work.com" -f "id_rsa_WORK"
ssh-keygen -t rsa -C "email@gmail.com" -f "id_rsa_PERSONAL"

Yukarıdaki komutların sonucunda id_rsa_WORKve id_rsa_WORK.pubdosyalar için oluşturulacak çalışma ve - hesap (git.work.com ex) id_rsa_PERSONALve id_rsa_PERSONAL.pubsizin için oluşturulur kişisel (- github.com eski) dikkate.

Oluşturulduktan sonra, içeriği her ortak ( *.pub) dosyadan kopyalayın ve her hesap için 2. Adım'ı uygulayın.

Not : ~/.ssh/configİki hesabınızın ana bilgisayar adı farklıysa, diğer yanıtlarda belirtildiği gibi dosya altındaki her git hesabı için bir ana bilgisayar girişi yapmanız gerekmez .


Yerel bilgisayarınızdaki iki hesap arasında nasıl geçiş yaparsınız?
user4015990

1
Değiştirmeye gerek yoktur. Yerel bir repoyu her kopyaladığınızda, hesap bilgileri yerel repodaki git tarafından kaydedilir. Dolayısıyla, bir yerel itme işlemine git veya çektiğinizde, yukarıdaki yapılandırma hangi hesabın dikkate alınacağını algılar.
Sahil Chhabra

0

Eğer sahip olursan wsl WSL üzerinde bir ve pencerelerde biri - İki ayrı git hesabına sahip olabilir yüklü.


0

Bazı ortak kimlik bilgileriyle projeyi zorlamalısınız. Yeni bir makineye başladıktan sonra, gitlab kimlik bilgilerinizi ayarlamak ve doğru şekilde kullanmak için aşağıdaki adımları kullanın:

  • makinede kasık / özel ssh anahtarlarını oluşturma
  • genel anahtarı gitlab / github ui arayüzüne yapıştırın (cmd hattı üzerinden nasıl yapılacağını ima eden herkes ücretsiz bir bira alır ...)
  • Repoyu http url yerine git üzerinden kopyaladığınızdan emin olun
  • git komutuna aynı önekin sürekli yazılmasını önlemek için git takma adını ayarlayın
  • git commit sırasında DAİMA yazar ve e-posta bayraklarını kullanın
  • git'i normal olarak kullan

Bütün bunlar şöyle:

 # 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 git@git.in.org.net: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 <you@phz.fi>"

 # use git as normal
 git fetch --all; git pull --all 

0
  1. Değişikliklerinizi farklı bir GitHub hesabına aktarmak istediğiniz dizine gidin.
  2. Terminal / komut satırınızda yeni bir SSH anahtarı oluşturun.

    ssh-keygen -t rsa -C “e-posta adresiniz”

  3. Ardından aşağıdakiler gösterilir:

    Genel / özel rsa anahtar çifti oluşturuluyor. Anahtarın kaydedileceği dosyayı girin (/home/your_username/.ssh/id_rsa):

Yolu kopyalayın ve ardından dosya için tanımlanabilir bir ad yapıştırın:

/home/your_username/.ssh/id_rsa_personal

4) Daha sonra sizden aşağıdakileri isteyecektir:

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

5) Artık yerel makinenizde bulunan tüm SSH anahtarlarını görmek için aşağıdaki komutu yazabilirsiniz:

ls -al ~/.ssh

Yeni SSH anahtar dosyanızı görebilmeniz gerekir. Birinde gördüğünüz gibi hem id_rsa_test hem de id_rsa_personal.pub var.

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) Sonra id_rsa_personal.pub dosyasında saklanan SSH anahtarını kopyalamanız gerekir. Bunu istediğiniz metin düzenleyicide açabilirsiniz. Şu anda atom kullanıyorum, bu yüzden aşağıdaki komutu kullanarak dosyayı açtım:

atom ~/.ssh/id_rsa_personal.pub

Daha sonra buna benzer bir şey alırsınız:

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

7) Bunu kopyalayın ve GitHub hesabınıza gidin → Ayarlar → SSH ve GPG tuşları 8) Yeni SSH tuşuna tıklayın. Anahtarı kopyalayın, bir başlık verin ve ekleyin. 9) Terminalden anahtar ekleyin

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

10) Kullanıcı ve şifreyi yapılandırın.

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

11) Şimdi çalışmaya ve itmeye hazırız.

git init
git add .
git commit 
git push

0

Başka bir depo oluşturduysanız veya klonladıysanız ve originveyaupstream ve aşağıdaki komutu kullanarak o dizinden ssh anahtarını ekleyemediyseniz çalıştı.

Buraya geldiğim hatadır:

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.

Aşağıdaki komutu kullandım, bu çalışır:

ssh-add ~/.ssh/id_rsa_YOUR_COMPANY_NAME

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.