由于使用 YubiKey,我需要在 Windows 上运行 gpg-agent,于是我写了一个批处理文件 yubikey.bat,其内容如下:

"C:\Program Files (x86)\gnupg\bin\gpg-agent.exe" --daemon --enable-putty-support

当双击运行这个文件时,Windows 那个黑乎乎的 Command 窗口就出现了,而且不能关闭,因为 gpg-agent 的 --daemon 参数在 Windows 下是没实现的。那有什么方式让一个命令行程序能后台运行呢?就像 Linux 那样。

我想到了 Mingw-w64,它可以简单的理解为运行在 Windows 上的 Linux 系统。最简单的安装方式是安装 Git Windows 客户端,就自动安装 Mingw-w64 了。

然后把 yubikey.bat 重命名为 yubikey.sh,修改其内容如下,注意最后的 & 符就是 Linux 下后台运行程序的符号:

"C:\Program Files (x86)\gnupg\bin\gpg-agent.exe" --daemon --enable-putty-support &

保存 yubikey.sh 并双击运行,gpg-agent 就会在后台运行了。

如果需要退出 gpg-agent,在 Windows 桌面右键,选择 Git Bash Here,在弹出的 Mingw-w64 窗口中输入 ps 查看 gpg-agent 的进程 ID,并使用 kill 停止即可:

$ ps -ef
     UID     PID    PPID  TTY        STIME COMMAND
shengdon   19224       1 pty0     19:27:15 gpg-agent
shengdon   26168   20824 pty1     19:28:20 /usr/bin/ps

$ kill 19224

此方法应适用于 Windows 下所有的命令行程序。