You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本获取GPG密钥过期信息:NRPE执行时私钥信息无法获取

解决方案

一、无需导入密钥的GPG命令

你的问题核心是NRPE运行脚本的用户(通常为nagios或nrpe)没有权限访问导入后的密钥环,或是导入操作在NRPE受限环境中未生效。可以直接读取私钥文件信息,无需导入到本地密钥环:

# 直接列出私钥文件的详细信息
gpg --list-secret-keys --batch --keyid-format long key.gpg > key_info.txt

如果需要机器易读的格式(方便脚本解析),用--with-colons参数:

gpg --show-keys --secret-key --with-colons key.gpg > key_info.txt

该格式输出的内容结构化强,避免了正则匹配纯文本的繁琐,脚本处理过期时间更高效。

二、使用python-gnupg模块获取密钥信息

完全可以用python-gnupg模块直接读取密钥文件、解析过期时间,无需依赖系统命令调用,兼容性和稳定性更好,尤其适配NRPE这类受限环境。

步骤1:安装模块

pip install python-gnupg

步骤2:示例代码

import gnupg
from datetime import datetime

def check_key_expiry(key_path, is_secret=False):
    gpg = gnupg.GPG()
    # 读取密钥文件内容
    with open(key_path, 'rb') as f:
        key_content = f.read()
    
    # 扫描密钥信息(区分公钥/私钥)
    if is_secret:
        keys = gpg.scan_keys(key_content, secret=True)
    else:
        keys = gpg.scan_keys(key_content)
    
    # 解析并输出过期信息
    for key in keys:
        key_id = key['keyid']
        expiry_timestamp = key['expires']
        if expiry_timestamp == '0':
            print(f"密钥 {key_id}: 永不过期")
        else:
            expiry_time = datetime.fromtimestamp(int(expiry_timestamp))
            print(f"密钥 {key_id}: 过期时间 {expiry_time}")

# 检查公钥
check_key_expiry('key.gpg', is_secret=False)
# 检查私钥
check_key_expiry('key.gpg', is_secret=True)

scan_keys方法直接读取密钥文件内容,无需导入到密钥环,完美避开NRPE用户的权限问题;返回的字典自带expires字段,解析过期时间无需额外处理。

注意事项

  • 确保NRPE运行用户拥有密钥文件的读取权限
  • 若私钥有密码保护,检查过期时间无需解密,上述代码可直接运行

内容的提问来源于stack exchange,提问作者Ajay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:00:57