create different public key
Note: blog’s git configuration is global, others is in your project
create different ssh key according to your need
1 | $ ssh-keygen -t rsa -f ~/.ssh/id_rsa_activehacker -C "jexlab@gmail.com" |
If your command line has no arguments “-f ~/.ssh/id_rsa_activehacker”, as following
1
2 $ ssh-keygen -t rsa -C "jexlab@gmail.com"
$ ssh-keygen -t rsa -C "jexchan@gmail.com"运行上面那条命令后会让输入一个文件名,用于保存刚才生成的 SSH key 代码,此时需要输入完整的绝对路径,或者只输入文件名,在当前目录生成,生成后移动到指定的.ssh文件夹内,如:
1 | Generating public/private rsa key pair. |
你也可以不输入文件名,使用默认文件名,那么就会生成 id_rsa 和 id_rsa.pub 两个全局默认的秘钥文件,前者为私钥,后者为公钥。
当然我们有两个代码仓库,所以最好写上文件名,如id_rsa(公司)或id_rsa_user2(个人). 这样ssh目录下会生成id_rsa.pub和id_rsa_user2.pub两个文件
接着又会提示你输入两次密码(该密码是你push文件的时候要输入的密码,而不是github管理者的密码)。也可以直接按回车键,那么push的时候就不需要输入密码,直接提交到github上了,如:
1 | Enter passphrase (empty for no passphrase): |
当你看到下面这段代码的时候,那就说明,SSH key 已经创建成功,只需要添加到github的SSH key上就可以了。
1 | Your identification has been saved in /c/Users/SKS/.ssh/id_rsa_activehacker. |
2 keys created at:
1 | ~/.ssh/id_rsa_activehacker |
then, add these two keys as following(添加到 ssh-agent 信任列表)
1 | $ ssh-add ~/.ssh/id_rsa_activehacker |
you can delete all cached keys before
1 | $ ssh-add -D |
finally, you can check your saved keys
1 | $ ssh-add -l |
请注意:此处有坑,你可能会遇到这样的问题
1 | Could not open a connection to your authentication agent. |
解决方案:(也可以是其他的,参考资料里边stackoverflow里边的答案你都可以试试)
1 | $ ssh-agent bash |
这之后,再添加。看到如下所示的情况,就证明添加成功了
1 | $ ssh-add ~/.ssh/id_rsa_activehacker |
添加ssh-key到github
在 Github 的后台,可以看到一个叫做 SSH and GPG keys 的选项:
这里面列出了当前账号绑定的 SSH Key。 每一个 key 对应一台独立的设备。
设置好两个ssh key之后就要配置下它们的使用场景
登录你的github账号,从右上角的设置( Settings )进入,然后点击菜单栏的 SSH key 进入页面添加 SSH key。
点击 Add SSH key 按钮添加一个 SSH key 。把你复制的 SSH key 代码粘贴到 key 所对应的输入框中,记得 SSH key 代码的前后不要留有空格或者回车。当然,上面的 Title 所对应的输入框你也可以输入一个该 SSH key 显示在 github 上的一个别名。
Modify the ssh config
1 | $ cd ~/.ssh/ |
Then added
1 | #activehacker account |
这样,在我们创建的 config 文件中,配置了两条记录。 分别指向两个 SSH key。 HostName是原本的域名 Host是与HostName对应的自定义的名字。
Clone you repo and modify your Git config
clone your repo
在项目的下载地址中,有一个 Use SSH 的链接,点击它之后,就可以得到 SSH 格式的地址
比如 git@github.com:activehacker/gfs.git。 我们需要对它稍作加工,把域名部分替换成我们在 config 中配置的 Host: git@github.com-activehacker:activehacker/gfs.git。
1 | $ git clone git@github.com:activehacker/gfs.git gfs_jexchan |
这样本地仓库就和对应的密钥建立起了联系。 以后的操作中,都会自动使用这个 SSH key 来访问 Github 远程仓库了。 如果想同时在另外一个本地仓库使用其他 Github 账户,只需要在 ~/.ssh/config文件中配置好相应的 SSH key 和对应的 Host,就可以了。
cd gfs_jexchan and modify git config(为每个仓库单独设置用户)
1 | $ git config user.name "jexchan" |
then use normal flow to push your code
1 | $ git add . |