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

Simulate keytool password keyboard input in bash script

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

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

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

首先,非常感谢你们两位,-storepass 非常有用!你让我很开心:)

我现在 post 我更新的解决问题的脚本:

#!/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。希望有一天这对某人有所帮助。

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

echo "" |keytool -list -keystore key.jks