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

Linux 在bash脚本中模拟keytool密码键盘输入,linux,bash,expect,keystore,keytool,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" OUT

我有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

这意味着我必须为每一次迭代输入密码,而且必须有一种(更好的)方法来做到这一点,即在提示密码时模拟键盘输入。浏览堆栈溢出时,我发现了一些使用某些“Expect”脚本的示例,但它们要么是最基本的,要么就是我无法正确使用,所以我无法将/bash和/Expect组合起来。必须说,我觉得有点奇怪,对于任务来说,并没有/bash技术是很常见的。我将感谢任何帮助,更喜欢示例脚本。谢谢

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

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

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

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

首先,非常感谢你们两位,-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
#/bin/bash

(首先,非常感谢你们两位,-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
!/bin/bash

对于((i=1;i查看公钥,现在需要密码;如果您可以输出一个简单的“回车”键,这也应该足够了。 例如


要查看公钥,现在需要密码;如果您可以输出一个简单的“回车”键,这也就足够了。 例如


为什么不使用
keytool
-storepass
选项(允许在命令行上指定密码)?为什么不使用
keytool
-storepass
选项(允许在命令行上指定密码)?