密码管理工具(命令行)
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
萌叔最近做一个类似1password
的命令行密码管理工具passwordbox
。传送门: vearne/passwordbox
支持使用对象存储进行多端同步(可选),目前支持阿里云OSS,青云QingStor
内部实现细节
首先将每个记录项加密存储在SQLite
的数据文件中,然后再对整个数据文件进行二次加密。记录在内存中也是以密文的形式存在,安全系数比较高。
快速开始
编译
make build
安装
make install
启动
pwbox --data=/Users/vearne
- --data 设置加密数据文件的存储路径
建议你为passwordbox
设置一个别名
alias pwbox='pwbox --data=/Users/vearne'
程序启动以后,按照导引的要求创建数据库,所有的记录项都存储在数据库中
─$ ./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 |
+----+-------+---------+----------+---------+---------------------------+
quit
注意 记住所有修改(CRUD)只有在执行quit
命令时,才会被持久化到磁盘上。
后记
2020年6月16日 v0.0.5已经支持通过对象存储实现多端同步,目前已支持阿里云/青云的对象存储。
值得鼓励。在说一句:keepassxc 我用的挺好,也有命令行可用
谢谢你的鼓励。