我打算把全部服务器的配置文件用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