最近閒得無聊註冊了一個新域名,順便弄了一大堆新帳號(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
目錄,進入該目錄改下配置而後再從新部署就好了。