如何在Linux bash中使用keytool匹配查找以_abc开头的证书
问题原因
- Shell通配符预展开:Bash环境下会优先解析命令中的
*通配符,自动匹配当前工作目录下以_abc开头的文件名,替换完成后才会将参数传给keytool,实际传入的参数并非你预期的_abc*。就算当前目录没有匹配的文件,通配符原样传递给keytool后也会触发第二个问题。 - keytool的
-alias参数仅支持精确匹配:该参数设计上只接受单个完整的别名值,不支持通配符、正则等模糊匹配逻辑,哪怕你给_abc*加引号避免Shell展开,也会被keytool当成一个完整的别名去查询,自然会报别名不存在的错误。
解决方法
keytool本身不支持模糊查询别名,你可以先列出所有证书条目,再通过管道传给文本过滤工具匹配前缀即可:
仅查询匹配前缀的别名列表
keytool -list -keystore /etc/pki/java/cacerts -storepass "changeit" | grep "^_abc"
查询匹配前缀的所有证书完整详情
keytool -list -keystore /etc/pki/java/cacerts -storepass "changeit" | grep "^_abc" | awk -F, '{print $1}' | xargs -I {} keytool -list -v -keystore /etc/pki/java/cacerts -alias {} -storepass "changeit"
可选优化:如果担心明文密码出现在进程列表中,可以移除命令中的
-storepass "changeit"参数,执行时按照提示交互式输入密码即可。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

