dotsecrets是一个工具,可以方便地将您的dot文件存储在git中,包括那些带有私人信息的文件。在提交到存储库之前,将筛选私有信息。DotSecrets可以将您的点文件符号链接到主目录中。

dotsecrets的Python项目详细描述


点秘密

dotsecrets是olaf conradi为方便存储而编写的工具。 您在Git中的点文件,包括带有私人信息的文件。

通过将配置文件存储在公共git存储库中,您可以 在多个设备之间同步设置或与共享设置 其他。任何私人信息都保存在外部的单个文件存储中 储存库。由用户在设备之间传输此文件。

此工具在功能上与公文包类似,但不同 明显地。DotSecrets使用Git筛选来管理私有信息 并使用不同的文件层次结构和命名约定。

有关Git过滤功能的更多信息,请参见 git attributes manual在filter attribute下的effects部分中 [3]

通过在中组织点文件,支持符号链接和取消链接 主题(特定的主题名称作为存储库中的顶级目录)。 stow和unstow命令自动链接和取消链接它们。你决定 如何命名主题。按应用程序或设备名称,或 两者的结合。这一做法在博客文章中解释。 布兰登·因弗戈回到2012年。

依赖关系

dotsecrets依赖于ruamel.yaml [5] 来读取配置文件和 对于Stow功能,dploy [6]

安装

<>运行:

$ pip3 install dotsecrets

然后,您应该在新的shell中有一个 dotsecrets 脚本可用。

直接从git存储库安装时,请使用:

$ pip3 install .

您可能需要将其符号链接到您的 ~/bin 文件夹:

$ ln -s ~/.local/bin/dotsecrets ~/bin

用法

DotSecrets将与Git一起用于管理您的点文件。

git过滤器用于清除和涂抹秘密。每个过滤器都已配置 使用按筛选器名称分组的正则表达式。过滤器被命名为 在相对于git根目录的文件路径之后。

过滤器

过滤器规则在名为 .dotfilters.yaml 的文件中定义,该文件位于 点文件存储库。

其语法如下:

version:2filters:"mutt/.mutt/muttrc":rules:passwd:description:Mutt passwordsnumbered:trueregex:password(\s*)=(\s*)(?#WSUpToHash)substitute:password\1=\2(?#Key)"irssi/.irssi/config":encoding:latin1rules:nickname:description:IRC nicknameregex:nick(\s*)=(\s*)(?#QuotedString);substitute:nick\1=\2"(?#Key)";realname:regex:real_name(\s*)=(\s*)(?#QuotedString);substitute:real_name\1=\2"(?#Key)";

此文件包含包含机密的每个文件的筛选规则。这个 第一个例子定义了一个过滤器,用于替换mutt配置中的密码 文件夹。每行匹配的正则表达式都检测到一个秘密 包含单词 密码 后跟等号和每个字符 (除空白外)最多可有一个可选的散列注释。

匹配将替换为以下内容: password=$dotsecrets:password_1$ 。 因为定义了 编号,所以键后面会附加匹配数 如 。这允许多个匹配和替换,只要 保留文件中的顺序。

第二个例子显示了一个过滤器,用于在irssi中隐藏您的昵称。 配置文件。编码字段将确保文件已打开 在指定的编码中(默认编码为utf-8)。正则表达式 匹配任何包含单词nick后跟空白和一个或 更多字母数字字符。火柴被 尼克="$dotsecrets: 昵称$";

类似于过滤器在同一个文件中隐藏您的真实姓名。规则的 表达式匹配任何包含 实名 后跟等号的行 签署,引用文本和最后一个分号。火柴被 实名="$dotsecrets: 实名$";

请注意,描述、编号和编码雅思是可选的。

正则表达式和替换遵循python正则表达式 语法 [7] 。替换可以使用 \number 语法。为了便于定义复杂的正则表达式, 以下快捷方式可用。它们被定义为regex注释 (?#…)

<表> < COLGROUP > < COL/> < COL/> <广告> 快捷方式 说明 < /广告> <正文> (?)#报价字符串) 匹配平衡的单引号或双引号字符串和 能够处理 字符串 (?)#引用单字) 与引号字符串或未引号的单个单词相同 非空白字符 (?)#wsuptohash) 将空格与哈希符号匹配 (?)#wsupto分号) 将空格与分号匹配 (?)<键】 用于替换密钥 <表>

秘密

机密信息,如密码、安全问题的答案和其他 敏感信息存储在名为 dotsecrets.yaml 的文件中 xdg配置目录(通常 ~/.config/dotsecrets/dotsecrets.yaml )。

其语法如下:

version:2filters:"mutt/.mutt/muttrc":secrets:password_1:description:Password for GMailsecret:s3cr3tpassword_2:description:Password for Hotmailsecret:f00bar"irssi/.irssi/config":secrets:nick:secret:mynickrealname:secret:My Real Name

此配置文件包含mutt和irssi的两个筛选器。各 筛选器包含一个或多个机密。这些秘密是用来过滤 Git存储库中敏感数据的文件。每个秘密都有一个可选的 描述字段。

链接筛选器和机密

git属性用于将文件模式链接到git过滤器。过滤器是 在git配置文件中定义。

.gittattributes的内容

* filter=dotsecrets

使用git签入文件时,将对那些 匹配 .gittattributes 中给出的模式。当签出文件时 定义一个过滤器,smudge命令将再次替换机密。

要添加这些筛选器,请运行以下命令:

$ git config filter.dotsecrets.clean "dotsecrets clean %f"
$ git config filter.dotsecrets.smudge "dotsecrets smudge %f"
$ git config filter.dotsecrets.required true

它们会导致您的 .git/config 文件中添加以下内容:

[filter "dotsecrets"]clean=dotsecrets clean %f
    smudge = dotsecrets smudge %f
    required = true

过滤(通常在git签入、签出或diff上)后, %f 参数替换为相对于git根目录的文件路径。 这就是为什么必须相应地命名过滤器。

初始化存储库

在重新签出dotfiles存储库时,git过滤器和git 属性配置尚未到位。 init 命令是 可用于初始化配置(需要时)并执行初始化 在定义为具有机密的文件上涂抹。

示例:

$ git clone git@github.com:username/dotfiles.git
$ cd dotfiles
$ dotsecrets init

收起和松开

使用stow命令,每个主题都链接到主目录中。这个 unstow命令将取消它们的链接。指定了要采取行动的主题 在命令行上。要对所有可用主题采取行动,请通过 --all 争论。添加 --干运行 以模拟将要采取的操作 不用做。

若要收起和取消收起,必须在 点筛选存储库。

示例:

$ pip3 install dotsecrets
0

这将包含两个主题。

使用以下命令模拟链接mutt的操作。输出 是否需要操作列表:

$ pip3 install dotsecrets
1

要从主目录中删除符号链接,请运行:

$ pip3 install dotsecrets
2

添加新的点文件

为新过滤器定义正则表达式可能需要一些实践。 要测试过滤器定义,可以使用一个 test 命令:

$ pip3 install dotsecrets
3

两个中间FI创建LE: config.dotclean 配置.dotsmudge 。显示原始源之间的差异 (包含机密)和清理后的文件(将包含 标记)。接下来,清洁后的光源被弄脏,用 秘密商店里的秘密。结果文件应与 原始源文件。如果不是这样,则显示差异。

假设机密存储中有一个输入错误:

$ pip3 install dotsecrets
4

在上面的例子中,key nick被设置为myname而不是mynick 商店。执行完成后,将删除中间文件。如果 如果要保留这些文件以进行更仔细的检查,请指定 命令行上的标志。

当您对输出满意时,可以在 版本控制。提交之前将应用干净的筛选器。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何将cassandra中的行数据转换为与列相关的嵌套json   java如何使用jcr XPath在jcr:content/@jcr:data中搜索?   java在使用openCV进行安卓开发时如何利用手机的广角镜头   java解析扩展了接口,结束了一个潜在的无限循环   位置服务的@Override方法中存在java Android应用程序错误   java本地线程的用途和需求是什么   具有左右子访问的java节点树遍历   java验证JsonWebToken签名   JUL日志处理程序中的java日志记录   嵌入式Java读取给定时间段的串行数据。   java有没有办法从多个URL获取多个图像?   java线程通过等待intent阻止自己发送intent   java Spring MVC解析多部分内容请求   java JPA/Hibernate静态元模型属性未填充NullPointerException   java格式错误的字符(需要引号,得到I)~正在处理   java为什么PrintWriter对象抛出FileNotFoundException?   java Neo4j未正确保存标签   java IE不加载图像