目的
我打算把所有服務器的組態檔用git管理起來,這樣可以記錄配置變更狀況, 但是有一個問題是,如何多人協作?服務器配置資訊非常敏感,如果這個版本庫泄漏,整個公司的服務器架構就徹底泄漏了, 這個版本庫只能在開發者本地電腦里面解密,遠程托管版本庫的服務器不應該知道檔案里面的內容,
那么解決辦法就是:本地git版本庫是解密的,在上傳程序中內容全部加密,密鑰保存在本地,同時密鑰可以分享給其他開發者,
考慮了幾個解決方案:
-
git-crypt:可以加密部分檔案,原理是加上了加密的fiter和diff, 但是官方說只適合加密部分檔案,而不適合全版本庫加密,部分檔案加密很容易造成資訊泄漏,一定要全版本庫加密才適合, -
串聯
sshfs和遠程服務器加密檔案系統encfs:首先用sshfs加載遠端檔案系統,然后用encfs創建加密檔案系統, 我估計無法解決多人同時push情況下的競爭條件,并且encfs有安全漏洞,使用上push/pull之前需要加載兩層檔案系統,不是很方便, -
git-remote-gcrypt用gpg進行遠端加密, 比較符合我預期的模式,但是用gpg不是特別方便協作,但是別的方法走不通,只有這個方法可用,
使用方法
安裝git-remote-gcrypt和gnupg
sudo apt-get install git-remote-gcrypt gnupg
創建一個gpg的key,
需要設定用戶名,郵箱,描述等,不要設定過期時間
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::[email protected]:liberxue/liberxue.git
最好指定用哪個key加密
這樣可以共享這個key給其他人用
git config remote.cryptremote.gcrypt-participants "liberxue013"
push到遠端
git push cryptremote master
- 訪問遠端版本庫,看看檔案內容,和commit里面的資訊,是不是都是加密的?
如何分享給其他人
匯出key
gpg --export-secret-key -a "[email protected]" > secretkey.asc
- 把secretkey.asc分享給其他人,拷貝的時候記得先壓縮加密一下再發送,更安全
別人電腦里面匯入
gpg --import secretkey.asc
下載代碼
git clone gcrypt::[email protected]:liberxue/liberxue.git test2 // test2是git clone 在本地的文
件名
也要指定一下用什么key加密
git config remote.cryptremote.gcrypt-participants "liberxue013"
用這種方法,可以用git管理一些私密又需要協作的資訊(比如服務器配置), 也可以把github當作私密的版本控制系統來用(commit的訊息還是明文的),
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/3066.html
標籤:其他
