在bash脚本中模拟keytool密码键盘输入

时间:2017-03-03 16:28:52

标签: linux bash expect keystore keytool

我喜欢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技术的任务可能看起来很常见。我会感谢任何帮助,更喜欢示例脚本。谢谢!

3 个答案:

答案 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