在Mac下使用多个SSH key

如今克隆Github上项目,可以使用Https SSH两种方式。使用https url克隆对初学者来说会比较方便,复制https url 然后到 git Bash 里面直接用clone命令克隆到本地就好了。而使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH key 。因此,如果你想要使用 SSH url 克隆的话,你必须是这个项目的拥有者。否则你是无法添加 SSH key 的。以下是两者的区别:

  1. 前者可以随意克隆github上的项目,而不管是谁的;而后者则是你必须是你要克隆的项目的拥有者或管理员,且需要先添加 SSH key ,否则无法克隆。

  2. https url 在push的时候是需要验证用户名和密码的;而 SSH 在push的时候,是不需要输入用户名的,如果配置SSH key的时候设置了密码,则需要输入密码的,否则直接是不需要输入密码的。

对于如何添加SSH key,早前在如何设置添加SSH有过记载。

但我们需要更改的Github项目肯定不止于仅在一个账号上,这就需要在机器上另外生成SSH key以满足需求,这需要以下几个步骤:

  1. 生成并添加第N(N>=2)个ssh key: 运行代码如下:
     ssh-keygen -t rsa -C "youremail@xxx.com"  
    

    第一次运行(即 本机上还没有SSH key时),在Git Bash中执行命令一路回车,会在~/.ssh/目录下生成id_rsa和id_rsa.pub两个文件。但第二次及以后添加SSH key,切记不要一路回车,在Bash中提醒你给这key取一个名字的时候,就依她的, 不然默认的话就覆盖了之前生成的第一个。如果生成的第二个ssh key不在.ssh/下,可移动到此目录。

  2. 将生成的SSH key添加到Github处。

  3. 在.ssh/下创建(/修改)config文件 内容如下:

    Host github.com
    HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_rsa
    Host my.github.com HostName github.com
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/my

Host名字随意(当与之前的有区别),接下来会用到。

  1. 测试下是否配置正确 运行ssh -T git@my.github.com,my.github.com 为你所取的Host Name ➜ .ssh ssh -T git@my.github.com Saving password to keychain failed Identity added: /Users/yunjeff/.ssh/id_rsa_nicejade_1601 (/Users/yunjeff/.ssh/id_rsa_nicejade_1601) Hi ! You’ve successfully authenticated, but GitHub does not provide shell access.

如果出现Hi xxx!You’ve successfully authenticated 就说明连接成功了。

  1. 修改Github项目配置文件

如果本地已经创建或已经clone到本地:有如下两种解决方法:

一: 打开.git/config文件

#更改[remote "origin"]项中的url中的  
#my.github.com 对应上面配置的host  
[remote "origin"]
        url = git@my.github.com:nicejade/nicejade.github.io.git
        fetch = +refs/heads/*:refs/remotes/origin/*

二: Git Bash中提交的时候修改remote

$ git remote rm origin  
$ git remote add origin git@my.github.com:nicejade/nicejade.github.io.git

如果还没Clone到本地,clone仓库时修改对应配置host对应的账户即可:

#my.github.com对应一个账号  
git clone git@my.github.com:username/repo.git  

如此,即可在一台机器上欢乐的玩不在同一个Github帐号的多项目了,干,折腾完了就是爽。

参考文章: 多个github帐号的SSH key切换

Table of Contents