在服务器上用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的密码。
和之前的那篇类似,这里也给出一些安全方面的注意事项:
- gpg-agent的安全性依赖于本地文件系统安全性。只应在可以信赖的系统,例如作为"通道"的服务器上使用。
- gpg-agent作为ssh-agent使用时,其安全性还依赖于远程系统的本地安全性。如果远程系统不可信赖,在 ssh 登录时应禁用 Forward Agent。远程系统并不能获得私钥,但可以让本地系统进行签名,从而导致问题。
- 默认的过期时间是gpg密钥600秒(10分钟)。可以通过–default-cache-ttl来调整。
更新:发现 gpg-agent 由于某种原因没有对 ssh 生效(不是没有指定 –enable-ssh-support),所以暂时先用两个daemon来跑。