用 secret-tool 获取代理密码
将代理密码放在 shell 启动文件之外,同时兼顾用户会话和客户端所需的明文值。
对于使用 Secret Service 的交互式桌面会话,将代理机密与它的标识属性分开存储:
secret-tool store --label='Work web proxy' purpose web-proxy host proxy.example
单独提供机密;不要把它放进 label 和属性里。要取回它,使用 secret-tool lookup purpose web-proxy host proxy.example。该命令会把匹配的机密输出到标准输出,因此请把输出交给目标客户端所支持的凭据接口,而不是共享的诊断记录。
查询需要相应用户的 D-Bus 会话以及可用的 Secret Service。集合可能需要解锁。cron 任务不会自动复现桌面已解锁的状态,root 的查询也不会选中另一个用户的密钥环。
把存储查询失败与代理认证被拒分开处理。静默发送空密码并重试会掩盖究竟是哪个操作失败。
在客户端支持时,优先使用单独的凭据字段。如果凭据必须放进代理 URL,请把用户名和密码编码为 URI 组件;shell 的引号处理并不执行 URL 编码。
密钥环免去了在 .profile 中写入字面机密的必要。取回的值仍然存在于内存中,导出它会让继承的子进程也看到它。受保护的存储并不能让该运行时环境变成机密保险库。