最近闲得无聊注册了一个新域名,顺便弄了一大堆新帐号(Github、Twitter等),准备来一次完全的改头换面。html
注册新域名后第一件事就是弄了这个博客。注册Github时发现一个SSH公钥只能关联一个Github帐号,使用https的话又要常常输入密码。因此只好Google搜索一下解决方案。顺便在这里留下总结,以便往后查看。git
首先看一下SSH的配置文件 ~/.ssh/config
的格式:github
Host alias # 该配置的匹配模式 HostName hostname # 远程主机名 Port port # 远程主机端口 User user # 链接远程主机的用户名 IdentityFile key # 改配置使用的密钥
真实的SSH配置文件的属性要比这个多得多,这里只说几个等下会用到的。更多的属性能够参考 这里 。
<!-- more -->bash
其中:hexo
Host
属性用于肯定什么时候使用该配置,可以使用通配符,至关于一个别名HostName
为该配置的真实主机名,如过是 Github 的话则为 github.com
Port
为远程主机的端口,默认为 22
User
为链接远程主机的用户名,在 Github 中为 git
IdentityFile
为该配置使用的密钥文件例如一个配置文件以下:ssh
Host world HostName world.com Port 2222 User hello IdentityFile ~/.ssh/world Host bar HostName bar.com User foo IdentityFile ~/.ssh/bar
若是在终端输入post
ssh world
则至关于在终端输入了命令行
ssh -p 2222 -i '~/.ssh/world' hello@world.com
如输入code
ssh bar
则至关于输入htm
ssh -i '~/.ssh/bar' foo@bar.com
这里须要多个密钥,能够经过
ssh-keygen
命令来来生成:
# 在 `~/.ssh/` 目录下生成私钥 `world` 和公钥 `world.pub` ssh-keygen -t rsa -C "hello@world.com" -f ~/.ssh/world # 期间会提示输入密码,可为空 # 在 `~/.ssh/` 目录下生成私钥 `bar` 和公钥 `bar.pub` ssh-keygen -t rsa -C "foo@bar.com" -f ~/.ssh/bar
这样一来,只要写入多个配置,就能够实现经过不一样的别名来使用不一样的密钥去访问一个远程主机。从而就可经过为不一样的Github帐户配置不一样的别名来达到经过SSH方式在一台主机上使用多个Github帐号。
先来看一下github的仓库地址: git@github.com:hardo/blog.git
咱们发现github仓库地址的用户名均为 git
, 主机名均为 github.com
, 每一个用户的仓库放在同名目录中。
假如如今有两个Github帐号 hello
和 hardo
。
先为这两个帐号生成密钥:
# 在 `~/.ssh/` 目录下生成私钥 `hello` 和公钥 `hello.pub` ssh-keygen -t rsa -C "hello@world.com" -f ~/.ssh/hello # 在 `~/.ssh/` 目录下生成私钥 `hardo` 和公钥 `hardo.pub` ssh-keygen -t rsa -C "i@hardo.me" -f ~/.ssh/hardo
而后将 hello.pub
文件里的内容复制到 Github 帐号 hello
的设置里,将 hardo.pub
文件里的内容复制到 hardo
的设置里。
在 ~/.ssh/config
文件里输入以下配置信息:
Host hello.github.com HostName github.com User git IdentityFile ~/.ssh/world Host hardo.github.com HostName github.com User git IdentityFile ~/.ssh/bar
配置完成后,即可以使用不一样的别名来区分不一样的用户:
# 使用 hello 用户克隆 hello 的 test 仓库 git clone git@hello.github.com:hello/test.git # 其中前面的 git 用户名能够省略, # 但为了便于识别这里仍是加上 # 使用 hello 用户克隆 hardo 的 blog 仓库 git clone git@hello.github.com:hardo/blog.git # 如过没有权限的话,将不可推送到默认源 # 使用 hardo 用户克隆 hardo 的 blog 仓库 git clone git@hardo.github.com:hardo/blog.git
虽然远程用户是没问题了,但这里还有一个本地用户的问题。
若是设置了全局用户名和邮箱地址,则不论向哪一个用户克隆的仓库commit代码都将是全局的用户邮箱所为对应的用户。这看起来会很奇怪,看起来是两个用户,一看commit信息倒是一个用户。
咱们要作的是删除Git的全局用户配置,为每一个仓库单独配置用户。
或者将全局用户配置为一个用户,而后为另外一个用户的全部仓库添加单独的本地用户信息。
# 取消全局的用户配置 git config --global --unset user.name git config --global --unset user.email # 进入一个仓库 git clone git@hardo.github.com:hardo/blog.git cd blog # 为仓库单独配置用户 git config user.name 'hardo' git config user.email 'i@hardo.me'
本博客是用 Hexo
生成的,Hexo 很方便的一项功能就是一条命令行就能够部署到Github pages。在 Hexo 的全局配置文件 _config.yml
中能够配置:
deploy: type: git repo: git@hardo.github.com:hardo/blog.git branch: gh-pages
输入 hexo deploy
,一切正常。可是去看 gh-pages
分支的commit信息,发现推送者是本地配置的全局用户。配置文件里可不以改本地用户博主也不清楚,也懒得去查(懒癌晚期)。不过让我在 博客仓库 的根目录里发现了 .deploy_git
目录,猜测应该是生成后的仓库。因而去这个目录下改了本地用户信息:
cd .deploy_git git config user.name 'hardo' git config user.email 'i@hardo.me'
改完以后再从新部署,发现果真成功了!
固然,若是你没有配置全局用户的话,第一次部署会失败。虽然失败了,但仍是会生成
.deploy_git
目录,进入该目录改下配置而后再从新部署就好了。