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

问题描述 投票:0回答:3

我喜欢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我发现了一些使用某些“Expect”脚本的例子,但是它们要么是初级的,要么我无法设法使它正确,所以我在组合/ bash和/ expect时失败了。必须说我觉得有点奇怪的是,没有/ bash技术的任务可能看起来很常见。我会感谢任何帮助,更喜欢示例脚本。谢谢!

linux bash expect keystore keytool
3个回答
2
投票

最简单的方法是使用-storepass选项,它允许您在命令行上传递密码。如果由于某些原因对你不起作用(也许你有一个早期版本),这里有一个适合我的expect脚本:

expect -c "spawn /usr/bin/keytool -list; expect \"assword:\" { exp_send \"the_password\r\"}; expect EOF {exit}"

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。希望有一天能帮助某人。


0
投票

要查看公钥,现在需要密码;如果你可以输出一个简单的“ENTER”击键,那也应该足够了。例如。

echo "" |keytool -list -keystore key.jks
© www.soinside.com 2019 - 2024. All rights reserved.