如何用awk查找含明文私钥的文件(排除加密格式)
解决方案:用awk精准定位明文私钥文件
直接用以下awk命令即可替代原有bash脚本,完美处理含特殊字符的文件名,同时避免加密私钥的误报:
/BEGIN.*PRIVATE KEY/ { # 跳过已确认含明文私钥的文件,避免重复输出 if (FILENAME in seen) next # 读取当前私钥标记行的下一行 rc = getline nextline # 两种情况判定为明文私钥: # 1. 已到文件末尾(无后续行);2. 下一行不是加密标记 if (rc == 0 || nextline !~ /^Proc-Type: 4,ENCRYPTED/) { print FILENAME seen[FILENAME] = 1 } next }
使用方式
1. 处理当前目录下指定类型文件
awk -f find_plain_private_keys.awk *.pem *.key
2. 递归处理所有文件
用find配合-exec {} +传递文件名,彻底解决bash循环的文件名缺陷:
find . -type f -exec awk '/BEGIN.*PRIVATE KEY/ { if (FILENAME in seen) next; rc=getline nextline; if (rc==0 || nextline!~/^Proc-Type: 4,ENCRYPTED/) { print FILENAME; seen[FILENAME]=1 } next }' {} +
逻辑说明
seen数组:记录已输出的文件名,确保每个文件只输出一次,不管内部有多少个明文私钥getline nextline:读取私钥起始行的下一行,判断是否存在加密标记- 加密私钥的判定:私钥起始行后紧跟
Proc-Type: 4,ENCRYPTED行,这类文件会被过滤;反之则判定为明文私钥文件
内容的提问来源于stack exchange,提问作者ARMs_for_the_poor
相关产品推荐
相关产品推荐

