在服务器上用gpg-agent

• 本文约 412 字,阅读大致需要 1 分钟 | Security

上回书说到通道服务器的问题。在 /etc/csh.cshrc 中添加下列内容,可令系统同时启动 gpg-agentssh-agent

1
2
3
4
5
6
7
setenv SSH_AUTH_SOCK    /dev/null/nonexistent
if ("${TERM}" != "su") then
        [ -e ~/.gpg-agent.csh ] && source ~/.gpg-agent.csh >& /dev/null
        echo UPDATESTARTUPTTY | /usr/local/bin/gpg-connect-agent >& /dev/null || /usr/local/bin/gpg-agent --daemon --ignore-cache-for-signing >& ~/.gpg-agent.csh && source ~/.gpg-agent.csh >& /dev/null
        [ -e ~/.ssh-agent.csh ] && source ~/.ssh-agent.csh >& /dev/null
        [ -e ${SSH_AUTH_SOCK} ] || ssh-agent -c -t 20m >& ~/.ssh-agent.csh && source ~/.ssh-agent.csh >& /dev/null
endif

启动 gpg-agent 的作用是在一段时间内不用重新输入 gpg 的密码。

和之前的那篇类似,这里也给出一些安全方面的注意事项:

  1. gpg-agent的安全性依赖于本地文件系统安全性。只应在可以信赖的系统,例如作为「通道」的服务器上使用。
  2. gpg-agent作为ssh-agent使用时,其安全性还依赖于远程系统的本地安全性。如果远程系统不可信赖,在 ssh 登录时应禁用 Forward Agent。远程系统并不能获得私钥,但可以让本地系统进行签名,从而导致问题。
  3. 默认的过期时间是gpg密钥600秒(10分钟)。可以通过 --default-cache-ttl 来调整。

更新:发现 gpg-agent 由于某种原因没有对 ssh 生效(不是没有指定 --enable-ssh-support),所以暂时先用两个daemon来跑。