GitHub当作私密的版本控制系统远端版本库私有化
目的
我打算把所有服务器的配置文件用git管理起来,这样可以记录配置变更状况。 但是有一个问题是,如何多人协作?服务器配置信息非常敏感,如果这个版本库泄漏,整个公司的服务器架构就彻底泄漏了。 这个版本库只能在开发者本地电脑里面解密,远程托管版本库的服务器不应该知道文件里面的内容。
那么解决办法就是:本地git版本库是解密的,在上传过程中内容全部加密,密钥保存在本地,同时密钥可以分享给其他开发者。
考虑了几个解决方案:
git-crypt
:可以加密部分文件,原理是加上了加密的fiter和diff, 但是官方说只适合加密部分文件,而不适合全版本库加密。部分文件加密很容易造成信息泄漏,一定要全版本库加密才适合。串联
sshfs
和远程服务器加密文件系统encfs
:首先用sshfs
加载远端文件系统,然后用encfs
创建加密文件系统。 我估计无法解决多人同时push
情况下的竞争条件,并且encfs有安全漏洞,使用上push/pull
之前需要加载两层文件系统,不是很方便。git-remote-gcryp
t用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::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的消息还是明文的)。
GitHub当作私密的版本控制系统远端版本库私有化的更多相关文章
- Git(分布式版本控制系统)在Windows下的使用-将代码托管到开源中国(oschina)
一.Git是什么? Git --- The stupid content tracker, 傻瓜内容跟踪器.Git是目前世界上最先进的分布式版本控制系统. 二.SVN与Git的最主要的区别? ...
- Git是目前世界上最先进的分布式版本控制系统
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- git版本控制系统更新
版本控制系统: 一.概念: 版本控制系统(Version Control System):是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统. 二.版本控制系统分类 1.本地版本控制 ...
- 分布式版本控制系统—git命令
一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...
- 版本控制系统Git
常用的版本控制系统有VSS.SVN.CVS等等,Git是最近几年使用得比较多的分布式版本控制系统,存在即合理,Git的出现总有它出现的理由,以前的版本控制系统肯定有一些不足的地方,所以才出现了Git. ...
- 《Linux就该这么学》自学笔记_ch21_使用Git分布式版本控制系统
<Linux就该这么学>自学笔记_ch21_使用Git分布式版本控制系统 文章主要内容: 分布式版本控制系统 使用Git服务程序 提交数据 移除数据 移动数据 历史记录 还原数据 管理标签 ...
- 版本控制系统(VCS)简介
简介 版本控制系统(VCS)是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.使用版本控制系统通常还意味着,就算你乱来一气把整个项目中的文件改的改删的删,你也照样可以轻松恢复到原先 ...
- 如何选择版本控制系统 ---为什么选择Git版本控制系统
版本控制系统 "代码"作为软件研发的核心产物,在整个开发周期都在递增,不断合入新需求以及解决bug的新patch,这就需要有一款系统,能够存储.追踪文件的修改历史,记录多个版本的开 ...
- SVN版本控制系统最佳实践
第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...
随机推荐
- 《唐三学node.js系列》—魂士篇&&三哥初始node.js
前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...
- vijos 分梨子
点击打开题目 很有(wei)趣(suo)的一道题 暴力解法也不难,枚举大小下限与甜度下限,在一个一个地试 显然 O(n^3) 炸掉 但如何将其缩短,只好从那个式子来入手了: C1⋅(ai−a0)+C2 ...
- JavaFx图形界面开发
相关学习教程:http://www.javafxchina.net/blog/docs/ ,makery写的教程:https://code.makery.ch/zh-cn/library/javafx ...
- ios---运用MJRefresh组件设置下拉刷新
#import "XMGTopicViewController.h" #import <AFNetworking.h> #import <MJExtension. ...
- 表单提交,action 地址问题
jsp 页面如下: <%@ page contentType="text/html;charset=UTF-8" language="java" %> ...
- Arduino通信篇系列之print()和write()输出方式的差异
我们都知道,在HardwareSerial类中有print()和write()两种输出方式, 两个都可以输出数据,但其输出方式并不相同. 例子: float FLOAT=1.23456; int IN ...
- Struts(六)
JSON(JavaScript Object Notation) 1.一种轻量级的数据交换格式 2.通常用于在客户端和服务器之间传递数据 3.jQuery的所有参数都是以JSON格式 ...
- ubuntu18.04系统下无外部显示问题解决
记录一下自己作死过程. 由于学习的需要,在windows10下装了ubuntu18.04系统,第一次装这个系统时,也出现了无外部显示,那时候是老师帮忙搞好的,当时没太在意,只是走马关花的看了老师操作了 ...
- 探究HashMap1.8的扩容
扩容前 扩容后 机制 else { // preserve order Node<K,V> loHead = null, loTail = null;//低指针 Node<K,V&g ...
- (三)Mybatis类型转换器,接口传参类型,一对一,一对多查询resultMap配置
Mybatis类型转换器 首先明白什么时候用到它,当数据库的字段类型和java字段类型无法默认匹配时候进行转换,比如现在数据库类型是INTEGER,而java当中类型是Boolean,true表示1, ...