我喜欢100个密钥库,例如" store15.jks"文件和单个X.509证书" mycert.pem"。我需要找出" store * .jks"," mycert.pem"导入。我要做的是使脚本迭代100次并执行命令
keytool -list -keystore store*.jks
我最初提出了这样的简单脚本:
#!/bin/bash
for((i=1;i<100;i++))
do
cert="mycert.pem"
str="store"$i".jks"
OUTPUT="$(keytool -list -keystore $str)"
echo $OUTPUT
done
唉,在第一次迭代时,我被提示输入密钥库密码,比如
Enter keystore password: //3 or 4 spaces after colon
这意味着我必须为每次迭代输入密码,并且必须有(更好)方法来执行此操作,即在提示密码时模拟键盘输入的方法。浏览Stack Overflow我发现了一些使用某些&#34; Expect&#34;脚本,但它们要么是初级的,要么我无法设法使它正确,所以我在组合/ bash和/ expect方面失败了。必须说我觉得有点奇怪的是,没有/ bash技术的任务可能看起来很常见。我会感谢任何帮助,更喜欢示例脚本。谢谢!
答案 0 :(得分:2)
最简单的方法是使用-storepass
选项,该选项允许您在命令行上传递密码。如果由于某些原因对你不起作用(也许你有一个早期版本),这里有一个适用于我的expect
脚本:
expect -c "spawn /usr/bin/keytool -list; expect \"assword:\" { exp_send \"the_password\r\"}; expect EOF {exit}"
答案 1 :(得分:0)
首先,非常感谢你们两个人,-storepass就像一个魅力!你让我很开心:)。
我现在发布解决问题的更新脚本:
#!/bin/bash
for((i=1;i<100;i++))
do
str="store"$i".jks"
sha="5A:6B:18"
OUTPUT="$(keytool -list -keystore $str -storepass mypass | grep $sha )"
echo $i
echo $OUTPUT
done
原始问题的答案是store74.jks。希望有一天能帮到某人。
答案 2 :(得分:0)
要查看公钥,现在需要密码;如果你可以输出一个简单的“ENTER”击键,那也应该足够了。 E.g。
echo "" |keytool -list -keystore key.jks