delphij's Chaos

选择chaos这个词是因为~~实在很难找到一个更合适的词来形容这儿了……

03 Jan 2011

在服务器上用gpg-agent

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


 
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来跑。