Multiple github accounts on the same computer?

后端 未结 25 2227
野的像风
野的像风 2020-11-22 02:56

Trying to work on my both my actual \"work\" repos, and my personal repos on git hub, from my computer.

The work account was set up first, and everything works flawl

相关标签:
25条回答
  • 2020-11-22 03:36

    Getting into shape

    To manage a git repo under a separate github/bitbucket/whatever account, you simply need to generate a new SSH key.

    But before we can start pushing/pulling repos with your second identity, we gotta get you into shape – Let's assume your system is setup with a typical id_rsa and id_rsa.pub key pair. Right now your tree ~/.ssh looks like this

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

    First, name that key pair – adding a descriptive name will help you remember which key is used for which user/remote

    # 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
    

    Next, let's generate a new key pair – here I'll name the new key github-otheruser

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

    Now, when we look at tree ~/.ssh we see

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

    Next, we need to setup a ~/.ssh/config file that will define our key configurations. We'll create it with the proper owner-read/write-only permissions

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

    Open that with your favourite editor, and add the following contents

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

    Presumably, you'll have some existing repos associated with your primary github identity. For that reason, the "default" github.com Host is setup to use your mainuser key. If you don't want to favour one account over another, I'll show you how to update existing repos on your system to use an updated ssh configuration.


    Add your new SSH key to github

    Head over to github.com/settings/keys to add your new public key

    You can get the public key contents using: copy/paste it to github

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

    Now your new user identity is all setup – below we'll show you how to use it.


    Getting stuff done: cloning a repo

    So how does this come together to work with git and github? Well because you can't have a chicken without and egg, we'll look at cloning an existing repo. This situation might apply to you if you have a new github account for your workplace and you were added to a company project.

    Let's say github.com/someorg/somerepo already exists and you were added to it – cloning is as easy as

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

    That bolded portion must match the Host name we setup in your ~/.ssh/config file. That correctly connects git to the corresponding IdentityFile and properly authenticates you with github


    Getting stuff done: creating a new repo

    Well because you can't have a chicken without and egg, we'll look at publishing a new repo on your secondary account. This situation applies to users that are create new content using their secondary github account.

    Let's assume you've already done a little work locally and you're now ready to push to github. You can follow along with me if you'd like

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

    Now configure this repo to use your identity

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

    Now make your first commit

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

    Check the commit to see your new identity was used using git log

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

    Alright, time to push to github! Since github doesn't know about our new repo yet, first go to github.com/new and create your new repo – name it somerepo

    Now, to configure your repo to "talk" to github using the correct identity/credentials, we have add a remote. Assuming your github username for your new account is someuser ...

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

    That bolded portion is absolutely critical and it must match the Host that we defined in your ~/.ssh/config file

    Lastly, push the repo

    $ git push origin master
    

    Update an existing repo to use a new SSH configuration

    Say you already have some repo cloned, but now you want to use a new SSH configuration. In the example above, we kept your existing repos in tact by assigning your previous id_rsa/id_rsa.pub key pair to Host github.com in your SSH config file. There's nothing wrong with this, but I have at least 5 github configurations now and I don't like thinking of one of them as the "default" configuration – I'd rather be explicit about each one.

    Before we had this

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

    So we will now update that to this (changes in bold)

    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

    But that means that now any existing repo with a github.com remote will no longer work with this identity file. But don't worry, it's a simple fix.

    To update any existing repo to use your new SSH configuration, simply open the repo's git config file and update the url!

    $ cd existingrepo
    $ nano .git/config
    

    Update the remote origin field (changes in bold)

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

    That's it. Now you can push/pull to your heart's content


    SSH key file permissions

    If you're running into trouble with your public keys not working correctly, SSH is quite strict on the file permissions allowed on your ~/.ssh directory and corresponding key files

    As a rule of thumb, any directories should be 700 and any files should be 600 - this means they are owner-read/write-only – no other group/user can read/write them

    $ 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
    

    How I manage my SSH keys

    I manage separate SSH keys for every host I connect to, such that if any one key is ever compromised, I don't have to update keys on every other place I've used that key. This is like when you get that notification from Adobe that 150 million of their users' information was stolen – now you have to cancel that credit card and update every service that depends on it – what a nuisance.

    Here's what my ~/.ssh directory looks like: I have one .pem key for each user, in a folder for each domain I connect to. I use .pem keys to so I only need one file per key.

    $ 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
    

    And here's my corresponding /.ssh/config file – obviously the github stuff is relevant to answering this question about github, but this answer aims to equip you with the knowledge to manage your ssh identities on any number of services/machines.

    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
    

    Getting your SSH public key from a PEM key

    Above you noticed that I only have one file for each key. When I need to provide a public key, I simply generate it as needed.

    So when github asks for your ssh public key, run this command to output the public key to stdout – copy/paste where needed

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

    Note, this is also the same process I use for adding my key to any remote machine. The ssh-rsa AAAA... value is copied to the remote's ~/.ssh/authorized_keys file


    Converting your id_rsa/id_rsa.pub key pairs to PEM format

    So you want to tame you key files and cut down on some file system cruft? Converting your key pair to a single PEM is easy

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

    Or, following along with our examples above, we renamed id_rsa -> github-mainuser and id_rsa.pub -> github-mainuser.pub – so

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

    Now just to make sure that we've converted this correct, you will want to verify that the generated public key matches your old public key

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

    Now that you have your github-mainuser.pem file, you can safely delete your old github-mainuser and github-mainuser.pub files – only the PEM file is necessary; just generate the public key whenever you need it ^_^


    Creating PEM keys from scratch

    You don't need to create the private/public key pair and then convert to a single PEM key. You can create the PEM key directly.

    Let's create a newuser.pem

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

    Getting the SSH public key is the same

    $ ssh-keygen -y -f ~/.ssh/newuser.pem
    ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
    
    0 讨论(0)
  • 2020-11-22 03:41

    If you happen to have WSL installed you can have two seperate git accounts - one on WSL and one in windows.

    0 讨论(0)
  • 2020-11-22 03:42

    All you need to do is configure your SSH setup with multiple SSH keypairs.

    • This link is easy to follow (Thanks Eric): http://code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net-22574

    • Generating SSH keys (Win/msysgit) https://help.github.com/articles/generating-an-ssh-key/

    Also, if you're working with multiple repositories using different personas, you need to make sure that your individual repositories have the user settings overridden accordingly:

    Setting user name, email and GitHub token – Overriding settings for individual repos https://help.github.com/articles/setting-your-commit-email-address-in-git/

    Hope this helps.

    Note: Some of you may require different emails to be used for different repositories, from git 2.13 you can set the email on a directory basis by editing the global config file found at: ~/.gitconfig using conditionals like so:

    [user]
        name = Pavan Kataria
        email = defaultemail@gmail.com
    
    [includeIf "gitdir:~/work/"]
        path = ~/work/.gitconfig
    

    And then your work specific config ~/work/.gitconfig would look like this:

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

    Thank you @alexg for informing me of this in the comments.

    0 讨论(0)
  • 2020-11-22 03:42

    By creating different host aliases to github.com in your ~/.ssh/config, and giving each host alias its own ssh key, you can easily use multiple github accounts without confusion. That’s because github.com distinguishes not by user, which is always just git, but by the ssh key you used to connect. Just configure your remote origins using your own host aliases.”

    The above summary is courtesy of comments on the blog post below.

    I've found this explanation the clearest. And it works for me, at least as of April 2012.

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

    0 讨论(0)
  • 2020-11-22 03:42

    Simpler and Easy fix to avoid confusions..

    For Windows users to use multiple or different git accounts for different projects.

    Following steps: Go Control Panel and Search for Credential Manager. Then Go to Credential Manager -> Windows Credentials

    Now remove the git:https//github.com node under Generic Credentials Heading

    This will remove the current credentials. Now you can add any project through git pull it will ask for username and password.

    When you face any issue with other account do the same process.

    Thanks

    refer to image

    0 讨论(0)
  • 2020-11-22 03:42
    1. Navigate to the directory in which you want to push your changes to a different GitHub account.
    2. Create a new SSH key in your terminal/command line.

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

    3. The following will then show:

      Generating public/private rsa key pair. Enter file in which to save the key (/home/your_username/.ssh/id_rsa):

    Copy and paste the path followed by an identifiable name for the file:

    /home/your_username/.ssh/id_rsa_personal
    

    4) It will then ask you for the following:

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

    5) You can now type in the following command to see all the SSH keys you have on your local machine:

    ls -al ~/.ssh
    

    You should be able to see your new SSH key file. As you can see in my one I have both id_rsa_test and 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) Next you need to copy the SSH key which is stored in id_rsa_personal.pub file. You can open this in text editor of your choice. I am currently using atom so I opened the file using the following command:

    atom ~/.ssh/id_rsa_personal.pub
    

    You will then get something similar to this:

    ssh-rsa AAB3HKJLKC1yc2EAAAADAQABAAABAQCgU5+ELtwsKkmcoeF3hNd7d6CjW+dWut83R/Dc01E/YzLc5ZFri18doOwuQoeTPpmIRVDGuQQsZshjDrTkFy8rwKWMlXl7va5olnGICcpg4qydEtsW+MELDmayW1HHsi2xHMMGHlNv

    7) Copy this and navigate to your GitHub account → Settings → SSH and GPG keys 8) Click on New SSH key. Copy the key, give it a title and add it. 9) Add key from terminal

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

    10) Configure user and password.

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

    11) We are ready to commit and push now.

    git init
    git add .
    git commit 
    git push
    
    0 讨论(0)
提交回复
热议问题