Categorygithub.com/vearne/passwordbox
modulepackage
0.0.16
Repository: https://github.com/vearne/passwordbox.git
Documentation: pkg.go.dev

# README

passwordbox

golang-ci

English README

passwordbox是一个类似1password的密码管理工具。完全基于命令行交互执行。

内部实现细节

首先将每个记录项加密存储在SQLite的数据文件中,然后再对整个数据文件进行二次加密。

快速开始

编译

make build

安装

make install

你也可以在 release 中找到已经编译好的文件

启动

pwbox --data=/Users/vearne
  • --data 设置加密数据文件的存储路径

建议你为passwordbox设置一个别名

alias pwbox='pwbox --data=/Users/vearne'

同步到对象存储

如果你希望数据文件在多个设备中共享,你还可以通过配置对象存储来实现。

目前已支持
pwbox --data=/Users/vearne --oss=/directory/qingstor.yaml
pwbox --data=/Users/vearne --oss=/directory/oss.yaml
  • --oss 对象存储的配置文件 (可选)
注意:
  1. pwbox是通过配置文件的名称来识别对象存储所属的云厂商,所以配置文件的名称是固定的
  2. 为了安全,一定要把对象存储的Bucket设置为私有(只允许使用密钥进行读写)

程序启动以后,按照导引的要求创建数据库,所有的记录项都存储在数据库中

─$ ./pwbox --data /tmp/
---- login database ----
? Please type database's name: test
fullpath /tmp/6879630a7d56210d2cd2491cb99d781194689fed71d7890a8dabbcb3a678cb73
? Database is not exist.
Do you like to create database now? Yes
---- create database ----
? Please type database's name: test
? Please type password: *****
? Please type hint[optional]: test
---- login database ----
? Please type database's name: test
fullpath /tmp/6879630a7d56210d2cd2491cb99d781194689fed71d7890a8dabbcb3a678cb73
? Please type your password: *****
Hint for database test is test

登录数据库成功之后,可以执行如下的命令

help

获取所有的可用命令,以及它们的用法

add

添加一个记录项

test > add
--AddItem--
? Please type Item's title: google
? Please type Item's account: myaccount
? Please type Item's password: **********
? Please type Item's comment(optional):
+----+--------+-----------+------------+---------+---------------------------+
| ID | TITLE  |  ACCOUNT  |  PASSWORD  | COMMENT |        MODIFIEDAT         |
+----+--------+-----------+------------+---------+---------------------------+
|  0 | google | myaccount | mypassword |         | 2020-04-15T13:43:45+08:00 |
+----+--------+-----------+------------+---------+---------------------------+
AddItem-save to file
--SearchItem--
total: 2
pageSize: 20 currentPage: 1
+----+--------+---------+----------+---------+------------+
| ID | TITLE  | ACCOUNT | PASSWORD | COMMENT | MODIFIEDAT |
+----+--------+---------+----------+---------+------------+
|  1 | baidu  | ***     | ***      | ***     | ***        |
|  2 | google | ***     | ***      | ***     | ***        |
+----+--------+---------+----------+---------+------------+
delete
test1 > delete --itemId 2
--DeleteItem--
+----+--------+---------------+---------------+---------+---------------------------+
| ID | TITLE  |    ACCOUNT    |   PASSWORD    | COMMENT |        MODIFIEDAT         |
+----+--------+---------------+---------------+---------+---------------------------+
|  2 | google | googleAccount | googleAccount |         | 2020-04-15T13:55:25+08:00 |
+----+--------+---------------+---------------+---------+---------------------------+
? confirm delete? Yes
delete item 2 success
--SearchItem--
total: 1
pageSize: 20 currentPage: 1
+----+----------------+---------+----------+---------+------------+
| ID |     TITLE      | ACCOUNT | PASSWORD | COMMENT | MODIFIEDAT |
+----+----------------+---------+----------+---------+------------+
|  1 |  baidu account | ***     | ***      | ***     | ***        |
+----+----------------+---------+----------+---------+------------+
modify
test > modify --itemId 1
--ModifyItem--
If you don't want to make changes, you can just press Enter!
? Please type Item's title:["baidu"] baidu account
? Please type Item's account:["baiduAccount"]
? Please type Item's password:["*************"]
? Please type Item's comment(optional):[""]
+----+---------------+--------------+---------------+---------+---------------------------+
| ID |     TITLE     |   ACCOUNT    |   PASSWORD    | COMMENT |        MODIFIEDAT         |
+----+---------------+--------------+---------------+---------+---------------------------+
|  1 | baidu account | baiduAccount | cbaiduAccount |         | 2020-04-15T13:17:58+08:00 |
+----+---------------+--------------+---------------+---------+---------------------------+
search
test > search --pageId 1 --keyword "baidu"
--SearchItem--
total: 1
pageSize: 20 currentPage: 1
+----+-------+---------+----------+---------+------------+
| ID | TITLE | ACCOUNT | PASSWORD | COMMENT | MODIFIEDAT |
+----+-------+---------+----------+---------+------------+
|  1 | baidu | ***     | ***      | ***     | ***        |
+----+-------+---------+----------+---------+------------+
  • pageId 记录项是分页显示的,每页20条数据,pageId是页号,从1开始
  • keyword 可以使用keyword来对记录项进行过滤,效果近似如下SQL语句
select * from item where title like "%keyword%"
view

以明文方式查看某个记录项的账号密码等信息。 除非执行view命令,否则一个记录项在内存中也是加密的。

test1 > view --itemId 3
--ViewItem--
+----+-------+---------+----------+---------+---------------------------+
| ID | TITLE | ACCOUNT | PASSWORD | COMMENT |        MODIFIEDAT         |
+----+-------+---------+----------+---------+---------------------------+
|  3 | baidu    | a3      | p3       |         | 2020-04-16T10:04:47+08:00 |
+----+-------+---------+----------+---------+---------------------------+
backup

备份

test > backup
2021/09/10 22:23:09 [debug] commandLine:backup
Backup will be executed where it quit.
restore

显示所有备份文件列表

test > restore
--RestoreItem--
+----+---------------------------+
| ID |            TAG            |
+----+---------------------------+
|  1 | 2021-09-10T22:24:34+08:00 |
|  2 | 2021-09-10T22:09:09+08:00 |
|  3 | 2021-09-10T21:57:03+08:00 |
|  4 | 2021-09-10T19:15:30+08:00 |
|  5 | 2021-09-10T18:31:27+08:00 |
|  6 | 2021-09-10T17:31:25+08:00 |
+----+---------------------------+

从指定的备份文件进行恢复

test > restore -tagId 1
--RestoreItem--
? confirm restore? Yes
2021/09/10 22:26:46 [info] 1. RestoreItem-close DB
2021/09/10 22:26:46 [info] 2. RestoreItem-rename, oldName:/tmp/6879630a7d56210d2cd2491cb99d781194689fed71d7890a8dabbcb3a678cb73.2021-09-10T22:24:34+08:00, newName:/tmp/6879630a7d56210d2cd2491cb99d781194689fed71d7890a8dabbcb3a678cb73
2021/09/10 22:26:46 [info] 3. RestoreItem-upload, key:pwbox/6879630a7d56210d2cd2491cb99d781194689fed71d7890a8dabbcb3a678cb73
2021/09/10 22:26:46 [info] Restore success.Please login later...
quit

注意 记住所有修改(CRUD)只有在执行quit命令时,才会被持久化到磁盘上。

modifyDB

修改数据库密码(对于之前的备份文件无效)

test3 > modifyDB
Modify DB password
1) The length must be greater than or equal to 8
2) It must contain at least one lowercase character[a-z]
3) It must contain at least one uppercase character[A-Z]
4) It must contain at least one number[0-9]
5) It must contain at least one special character[+-=_&$#^]
? Please type Database's new password: **************
? Please type Database's new password again: **************

2021/09/22 14:55:25 [info] len(itemList):1
test3 > quit
Save and Quit

对象存储配置文件模板

1. 青云 QingCloud

qingstor.yaml

access_key: xxxx
secret_key: xxxxx
bucket_name: xxxxx
zone: sh1a
dir_path: pwbox

2. 阿里云 aliyun

oss.yaml

access_key_id: xxxx
access_key_secret: xxxxx
bucket_name: xxxxx
endpoint: sh1a
dir_path: pwbox

# Packages

No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author

# Functions

No description provided by the author