面向产品经理的Emacs教程:28. 在Emacs里管理密码

· 2032字 · 5分钟

1 课程回顾 🔗

通过上节课,我们学习了如何在 Emacs 里使用 ChatGPT,有了这个工具后,我们的 Emacs 将变得更加无所不能。

今天,我们来学习如何通过 Emacs 来管理我们的密码。

2 概述 🔗

如何管理自己的密码,是人们工作生活的刚需,而设备、操作系统的多样化,也导致了密码管理的多样化。在苹果生态,有 iCloud 钥匙串、1Password 等解决方案,在 Linux 生态,有 pass 这样的工具。

因为个人的原因,我不期望我的所有生态都绑定在苹果这样的生态上,于是我计划着将我的密码管理,都统一迁移到以 pass 为核心的体系上,这样,哪天我用不了苹果设备的时候,不至于手足无措。

我个人对于密码管理的需求如下:

  1. 支持 Mac、Linux;
  2. 支持移动端(iOS、安卓)的密码自动输入;
  3. 支持浏览器和App的自动输入;
  4. 支持随时随地的查看;
  5. 能够通过某种方法云同步(最好是自己的 NAS);

基于以上的需求,我们将目光投在 pass 这个工具,这个工具的好处在于跨平台,开源,符合 unix 的哲学,支持 Git(适合 NAS 云同步)等。

3 Mac 上的 pass 配置 🔗

3.1 安装 🔗

直接执行下面的命令安装即可:

brew install pass

3.2 用已有的 PGP Key 初始化 🔗

通过 gpg --list-keys 命令来查看当前系统已有的 key 的信息:

gpg --list-keys

命令的输出可能长下面这样:

/Users/randolph/.gnupg/pubring.kbx
----------------------------------
pub   rsa4096 2021-03-28 [SC]
      827........................A975A
uid           [ultimate] Your Name <Yourmail@mail.com>
sub   rsa4096 2021-03-28 [E]

然后找到 pub 第二行的 key,通过下面的命令来初始化:

pass init 827........................A975A

3.3 [可选] 通过一个 git 仓库来管理密码 🔗

我在 NAS 上建了一个 Gitea 的 Docker 服务,用来管理一些自己个人的私有仓库。那我们就可以通过下面几个步骤来用 git 仓库管理密码:

  1. git init
    pass git init
    
  2. 添加远程仓库,假设你自己的仓库地址是: http://gitea.yoursite:10800/yourname/pass.git
    pass git remote add origin http://gitea.yoursite:10800/yourname/pass.git
    
  3. 将所有的本地的密码推送到仓库里:
    pass git push -u --all
    
  4. 如果你想在电脑端修改了密码后,自动推送到仓库,你可以在 ~/.password-store/.git/hooks/post-commit 文件写入下面的内容:
    #!/bin/sh
    set -x
    git pull --rebase
    git push
    

至此,在 Mac 端的配置都完成了。下面主要聊一下如何在 Emacs 里管理密码。

4 Emacs 上的 pass 配置 🔗

在 Emacs 上,我们通过 pass 插件来进行密码管理。首先,我们来安装它:

(use-package pass
  :ensure t
  :commands (pass)
  )

安装完后,我们可以通过 M-x pass 的方式来管理密码了,界面大概长下面这样(初始没有这些密码的目录,这些都是我自己维护的密码):

我们最主要使用到的两个操作是:

i
insert, 插入一个新的密码
j
Jump to Entry, 跳转到我们想要的密码,查看密码

4.1 插入新密码 🔗

我们在 pass 的界面按下 i 键后,会提示让我们输入 Password entry ,我们以 Email/example.com 为例来新建一个邮箱密码(Email这个目录是为了将密码分门别类,维护和可视化更加直观,核心在于 exmaple.com 这个邮箱所在的网站地址):

然后,它会提示你输入 Password ,以及 Confirm password ,两次密码必须输入一致:

然后就添加成功了:

此时,只有关于 example 的密码,还没有登录名信息,我们会在下个小节讲如何添加登录信息。

4.2 查看一个密码 🔗

我们按下 j 键,通过 vertico 补全框架定位到 exmaple.com

光标会自动跳转到 example.com 这个条目上,然后按下回车:

此时,根据它的提示,按下 C-c C-c 可以显示或者修改密码:

这里,我们还需要增加一个信息,就是邮箱的登录名,我们添加一个 login 的信息如下:

然后保存即可。


关于其他的操作,都很简单, pass 的界面也都有相应的快捷键提示。至此,Emacs 端的配置就完成了。

5 在 Mac 的 Firefox 上使用 pass 🔗

在 Firefox 上使用 pass,需要有下面3个步骤:

  1. 安装 host script for firefox

    curl -sSL github.com/passff/passff-host/releases/latest/download/install_host_app.sh
    
    bash ./install_host_app.sh firefox
    
  2. 安装 Firefox 的插件 PassFF

  3. 在某个网站提示输入密码时,按下右边的 P 图标,然后他会自动找到这个网站的密码,选中并点击最右侧的图标就可以直接输入密码登录了:

6 在 Mac 的 Alfred 里使用 pass 🔗

如果你使用 Alfred,那你可以下载 AlfredPass 这个 workflow,直接安装后即可。激活 Alfred 后,输入 pass 关键字,然后输入你想要查询的密码网站,它就可以查看和拷贝密码了。

7 在手机上使用 pass 🔗

7.1 华为鸿蒙3.1/安卓 🔗

截止本文写作时,我已经将我的手机从 iPhone 13 换成了华为 P60,我将以华为鸿蒙 OS 为例来展示如何使用 pass,其他安卓系统相同。在鸿蒙3.1里使用 pass 需要下面几个步骤:

  1. 在 F-droid 商店里安装 Password Store 应用和其依赖应用 OpenKeychain

  2. Password Store 这个应用的设置里,设置好 Git repo: ssh://git@gitea.yoursite:10022/randolph/pass.git

    注:在设置 Repo 的时候,如果使用 https 的 URL,不支持自定义端口,所以,我们需要用 ssh 的 URL。

  3. OpenKeyChain 这个应用的设置里导入已有的 GPG pubkey 和 GPG private key

  4. Password Store 里点击同步即可,然后就可以在应用里看到所有的密码了:

  5. [可选] 在 Password Store 这个应用的设置里,打开 Enable Autofill 就可以实现给华为手机里的 App 和网页里自动填写密码了。

7.2 iOS 🔗

iOS 的方式与安卓类似:

  1. 在 Apple Store 里安装 pass:

  2. 配置 Repo 和 PGP Key,配置参数和方法与安卓类似。

  3. 配置结束后,就能看到所有的密码了:

  4. 如果要在 iOS 上自动填充,需要在 「自动填充密码」的设置里选择 pass:

8 结语 🔗

如何管理自己的密码,其实是一个大的话题,并不仅限于 Emacs 的范畴,但 Emacs 可以做到的是在 Emacs 里快速、便利的管理自己的密码,再通过相应的 Git 同步等机制,做到多端实时的密码管理。

这节课的配置文件的快照见:emacs-config-l28.org

你也可以在 这里 查看最新的配置文件。