Linux命令行下密码管理和同步

本文记录了在命令行下使用gpg+pass+git进行密码管理的方法和步骤,以及在多台电脑间实现密码信息的同步。
对于这些命令的详细使用方法,可查阅文章末尾的参考部分。

使用GPG生成密钥对

你需要先创建GPG密钥,后面会使用该密钥来对密码信息进行加解密

1
$ gpg2 --gen-key

依照提示填写信息即可

真实姓名: Xxx Xxx
电子邮箱: xxxxxx@gmail.com

使用pass保存密码信息

初始化密码存储

1
2
3
$ pass init xxxxxx@gmail.com
mkdir: 已创建目录 '/home/xxxxxx/.password-store/'.
Password store initialized for xxxxxx@gmail.com

可以使用电子邮箱,也可以使用gpg2生成的ID;默认在~/.password-store目录下创建一个密码存储区

使用git+github管理密码

pass git命令的使用方法可以参考git命令

  • 初始化git密码仓库
    1
    2
    $ pass git init
    $ pass git remote add origin git@github.com:xxxxxx/远程仓库.git

此后,对密码信息的添加/删除等操作,都会自动提交本地。

  • 提交本地修改到服务器

    1
    $ pass git push -u origin master
  • 从服务器同步修改到本地

    1
    $ pass git pull origin master

此处使用ssh连接github,可参考:使用 SSH 连接到 GitHub

密码操作

  • 插入新的密码信息

    1
    2
    3
    4
    $ pass insert email/test@gmail.com
    mkdir: 已创建目录 '/home/xxxxxx/.password-store/email'
    Enter password for email/test@gmail.com:
    Retype password for email/test@gmail.com:
  • 保存更多信息

    1
    2
    3
    4
    5
    6
    $ pass insert -m email/test@gmail.com
    mkdir: 已创建目录 '/home/xxxxxx/.password-store/email'
    Enter contents of email/test@gmail.com and press Ctrl+D when finished:

    <信息1>
    <信息2>
  • 列出密码存储区已保存的密码

    1
    2
    3
    4
    $ pass
    Password Store
    └── email
    └── test@gmail.com
  • 显示密码,会要求输入gpg密码

    1
    2
    $ pass email/test@gmail.com
    test
  • 生成随机密码,并替换掉旧密码

    1
    2
    3
    4
    $ pass generate email/test@gmail.com 8
    An entry already exists for email/test@gmail.com. Overwrite it? [y/N] y
    The generated password for email/test@gmail.com is:
    d~'cRy3o
  • 编辑现有的密码,会自动打开默认编辑器进行密码修改

    1
    $ pass edit email/test@gmail.com
  • 移除密码信息

    1
    2
    3
    $ pass rm email/test@gmail.com
    Are you sure you would like to delete email/test@gmail.com? [y/N] y
    已删除'/home/xxxxxx/.password-store/email/test@gmail.com.gpg'

在目标电脑上同步密码库

导入GPG密钥

  1. 先在原电脑上把GPG密钥导出,再把导出的文件发送给目标电脑

    1
    2
    $ gpg2 -o public.gpg --export xxxxxx@gmail.com
    $ gpg2 -o private.gpg --export-secret-keys xxxxxx@gmail.com
  2. 然后在目标电脑上,导入GPG密钥

    • 导入私钥

      1
      2
      3
      4
      $ gpg2 --import private.gpg
      # 从输出中获得KEYID,修改该密钥的信任程度,否则可能无法使用该密钥对信息进行加密
      $ gpg --edit-key {KEYID} trust quit
      # 在提示中输入'5' (I trust ultimately)
    • 导入公钥

      1
      $ gpg2 --import public.gpg

同步密码仓库

现在,继续在目标电脑上,把github服务器上的密码仓库同步到本地

  1. 初始化密码存储

    1
    2
    3
    $ pass init xxxxxx@gmail.com
    mkdir: 已创建目录 '/home/cmy/.password-store/'
    Password store initialized for xxxxxx@gmail.com
  2. 同步github上的密码仓库

    1
    2
    3
    4
    $ pass git init # 执行完该命令后,会自动创建git仓库并在本地提交,后面通过reset命令使用服务器的内容覆盖掉本地提交
    $ pass git remote add origin git@github.com:xxxxxx/远程仓库.git
    $ pass git fetch
    $ pass git reset --hard origin/master

    至此,目标电脑的密钥,以及密码仓库内容均与原电脑保持一致。

Android设备中密码管理

Android版本的pass + gpg软件: https://github.com/android-password-store/Android-Password-Store

未使用,可自行探索

参考

打造基于 git 的跨平台密码管理器
GPG入门教程
pass:一款简单的基于 Linux 命令行的密码管理工具