git ssh-key 及多帐户设置

git ssh-key 及多帐户设置

在使用git的时候,我们在管理远程分支之前需要在本机上创建ssh-key密钥对,并把其中的公钥添加到github中。

首个帐户

如果你只会在你的计算机使用一个远程的Git服务器,并且账号是一个,比较简单,生成key的时候也没有太大注意的地方,直接运行如下的第一步然后按回车就可以了

  1. 在 gitbash上运行 ssh-keygen -t rsa -C "Github账户邮箱"
  2. 接下来会提示输入key的名字 默认名字为id_rsa ,默认不改直接回车就行了
  3. 然后会提示输入口令,这里口令与Github中的密码无关,随便输入可以为空,为空直接回车。
  4. 如果在第二步中的没有重新命名的话,则忽略此步骤,ssh agent默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中,如第二步改的名字为robin, 则执行:ssh-add id_rsa如果出现Could not open a connection to your authentication agent的错误,就试着先用以下命令:

     ssh-agent bash
     ssh-add robin
    

    添加完之后 登陆Github,点击网页右上侧的 Settings 按钮 - 选择 ssh-keys 点击Add SSH Key ,在title中输入名字,然后将公钥即id_rsa.pub添加到ssh-key处。

  5. 执行 ssh -T git@github.com 如果能正常访问即可

     $ ssh -T git@github.com
     Hi robin! You've successfully authenticated, but GitHub does not provide shell access.
    

第二个帐户

  1. 新建user2的SSH Key

     $ cd ~/.ssh     #切换到C:\Users\Administrator\.ssh
     ssh-keygen -t rsa -C "user2的Github账户邮箱"  //新建工作的SSH key
     Enter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): user2 //设置名称为user2(后文的user2可以统一替换任何别名)
    
  2. 新密钥添加到SSH agent中

    因为默认只读取id_rsa,为了让SSH识别新的私钥,需将其添加到SSH agent中:

     ssh-add ~/.ssh/user2 //注意路径,如果不在.ssh目录下则不能省略 '~/.ssh/'
    

    同样,如果出现Could not open a connection to your authentication agent的错误,就试着用以下命令:

     ssh-agent bash
     ssh-add ~/.ssh/user2
    
  3. 添加user2的公钥

    打开新生成的 ~/.ssh/uesr2.pub文件,将里面的内容添加到user2的github帐号下的SSH Key中。

  4. 修改config文件 (重要的一步)

    将账户以及git服务器与对应的密钥关联。在~/.ssh目录下找到config文件,如果没有就创建:

     touch config
    

    然后修改如下: 我的config配置如下:

     # 该文件用于配置私钥对应的服务器
     # Default github user1
     Host github.com
     HostName github.com
     User git
     IdentityFile ~/.ssh/id_rsa
    
     # second user2
     # 建一个github别名,新建的帐号使用这个别名做克隆和更新
     Host user2
     HostName github.com
     User git
     IdentityFile ~/.ssh/user2
    
  5. 帐号关联

    如果你只是文章中所述配置了Host,那么你多个账号下面的提交用户会是一个人,所以需要通过命令

     git config --global --unset user.email
    

    删除全局用户账户设置,当然也可以不删除,如果每个git项目下没有单独设置用户帐户信息的话,会默认使用全局设置

    在每一个git项目下面使用命令

     git config --local user.name '该项目的github用户名'
     git config --local user.email '该项目的github邮箱@mail.com'
    

    单独设置用户账户信息,每个不同于全局用户帐户的git 项目都需要设置。

  6. 关于 clone

    使用

     git clone user2:user2/test.git
    

    而不是

     git clone git@github.com:user2/test.git
    

    否则无法分辨使用的是哪一个帐户。

  7. 关于 remote

    如果clone 项目时使用的是

     git clone user2:user2/test.git
    

    则remote url的Host 就是user2,可以跳过这一步,否则需要更改一下关联(包括git init新建),查看 remote

     git remote -v
    

    如果user2的项目`remote.origin.url=git@github.com:user2/test.git `则需要进行修改

     git remote rm origin
     git remote add origin user2:user2/test.git
    
  8. 测试:

     $ ssh -T git@github.com
     Hi user1! You've successfully authenticated, but GitHub does not provide shell access.
     $ ssh -T user2
     Hi user2! You've successfully authenticated, but GitHub does not provide shell access.
    
0%