我打算把全部服務器的配置文件用git管理起來,這樣能夠記錄配置變動情況。 可是有一個問題是,如何多人協做?服務器配置信息很是敏感,若是這個版本庫泄漏,整個公司的服務器架構就完全泄漏了。 這個版本庫只能在開發者本地電腦裏面解密,遠程託管版本庫的服務器不該該知道文件裏面的內容。git
那麼解決辦法就是:本地git版本庫是解密的,在上傳過程當中內容所有加密,密鑰保存在本地,同時密鑰能夠分享給其餘開發者。github
git-crypt
:能夠加密部分文件,原理是加上了加密的fiter和diff, 可是官方說只適合加密部分文件,而不適合全版本庫加密。部分文件加密很容易形成信息泄漏,必定要全版本庫加密才適合。安全
串聯sshfs
和遠程服務器加密文件系統encfs
:首先用sshfs
加載遠端文件系統,而後用encfs
建立加密文件系統。 我估計沒法解決多人同時push
狀況下的競爭條件,而且encfs有安全漏洞,使用上push/pull
以前須要加載兩層文件系統,不是很方便。服務器
git-remote-gcryp
t用gpg
進行遠端加密。 比較符合我預期的模式,可是用gpg
不是特別方便協做。可是別的方法走不通,只有這個方法可用。架構
sudo apt-get install git-remote-gcrypt gnupg
須要設置用戶名,郵箱,描述等,不要設置過時時間ssh
gpg --gen-key
好比2048R/liberxue013裏面的liberxue013,2048表明加密輪數,越多越不容易破解測試
gpg --list-keys
mkdir test1 && cd test1 git init . echo "test" > a.txt git add . && git ci -m "update"
在你的github上面建立一個project,好比:https://github.com/liberxue加密
git remote add cryptremote gcrypt::git@github.com:liberxue/liberxue.git
這樣能夠共享這個key給其餘人用版本控制
git config remote.cryptremote.gcrypt-participants "liberxue013"
git push cryptremote master
gpg --export-secret-key -a "share@share.com" > secretkey.asc
gpg --import secretkey.asc
git clone gcrypt::git@github.com:liberxue/liberxue.git test2 // test2是git clone 在本地的文 件名
git config remote.cryptremote.gcrypt-participants "liberxue013"
用這種方法,能夠用git
管理一些私密又須要協做的信息(好比服務器配置), 也能夠把github看成私密的版本控制系統來用(commit的消息仍是明文的)。code