GitHub看成私密的版本控制系統遠端版本庫私有化

目的

我打算把全部服務器的配置文件用git管理起來,這樣能夠記錄配置變動情況。 可是有一個問題是,如何多人協做?服務器配置信息很是敏感,若是這個版本庫泄漏,整個公司的服務器架構就完全泄漏了。 這個版本庫只能在開發者本地電腦裏面解密,遠程託管版本庫的服務器不該該知道文件裏面的內容。git

那麼解決辦法就是:本地git版本庫是解密的,在上傳過程當中內容所有加密,密鑰保存在本地,同時密鑰能夠分享給其餘開發者。github

考慮了幾個解決方案:

  1. git-crypt:能夠加密部分文件,原理是加上了加密的fiter和diff, 可是官方說只適合加密部分文件,而不適合全版本庫加密。部分文件加密很容易形成信息泄漏,必定要全版本庫加密才適合。安全

  2. 串聯sshfs和遠程服務器加密文件系統encfs:首先用sshfs加載遠端文件系統,而後用encfs建立加密文件系統。 我估計沒法解決多人同時push狀況下的競爭條件,而且encfs有安全漏洞,使用上push/pull以前須要加載兩層文件系統,不是很方便。服務器

  3. git-remote-gcrypt用gpg進行遠端加密。 比較符合我預期的模式,可是用gpg不是特別方便協做。可是別的方法走不通,只有這個方法可用。架構

使用方法

安裝git-remote-gcrypt和gnupg
sudo apt-get install git-remote-gcrypt gnupg
建立一個gpg的key,

須要設置用戶名,郵箱,描述等,不要設置過時時間ssh

gpg --gen-key
記錄一下生成的key的ID,

好比2048R/liberxue013裏面的liberxue013,2048表明加密輪數,越多越不容易破解測試

gpg --list-keys
生成一個測試版本庫
mkdir test1 && cd test1
git init .
echo "test" > a.txt
git add . && git ci -m "update"
建立一個測試project

在你的github上面建立一個project,好比:https://github.com/liberxue加密

配置遠端加密版本庫
git remote add cryptremote gcrypt::git@github.com:liberxue/liberxue.git
最好指定用哪一個key加密

這樣能夠共享這個key給其餘人用版本控制

git config remote.cryptremote.gcrypt-participants "liberxue013"
push到遠端
git push cryptremote master
  • 訪問遠端版本庫,看看文件內容,和commit裏面的信息,是否是都是加密的?

如何分享給其餘人

導出key
gpg --export-secret-key -a "share@share.com" > secretkey.asc
  • 把secretkey.asc分享給其餘人,拷貝的時候記得先壓縮加密一下再發送,更安全
別人電腦裏面導入
gpg --import secretkey.asc
下載代碼
git clone gcrypt::git@github.com:liberxue/liberxue.git test2 // test2是git clone 在本地的文
件名
也要指定一下用什麼key加密
git config remote.cryptremote.gcrypt-participants "liberxue013"

用這種方法,能夠用git管理一些私密又須要協做的信息(好比服務器配置), 也能夠把github看成私密的版本控制系統來用(commit的消息仍是明文的)。code

相關文章
相關標籤/搜索