我正在创建一个用于生成证书的bash脚本。创建证书的openssl命令要求输入键盘。这是每次相同的键序列:七次[ENTER]后跟两次['y'+ ENTER]。我该如何以编程方式执行此操作?
我能够使用命令行参数减少消除所需的键盘输入:
-config FILE
指定配置文件-passin PWD
和-passout PWD
指定密码有关详细信息,请查看my experiments。这个网址可以通过颠覆来结账。
答案 0 :(得分:5)
模拟用户互动的一种方法是expect。
使用OpenSSL,您可以编写一个配置文件,该文件不需要任何输入来执行您要执行的任务。 (见man 5ssl config
)
有关如何编写opennssl脚本的好例子,请参阅CACerts CSRGenerator script。
答案 1 :(得分:1)
由于它要求键盘输入,只需给它一些东西来阅读。
我认为yes | your_script
可以正常工作,否则您只需将以下序列写入其输入:
\n\n\n\n\n\n\ny\ny\n
答案 2 :(得分:0)
Expect非常擅长这种事情。其他语言可以让你通过他们的popen风格的设施(远不那么方便)。
你可能能够像@tusbar建议的那样管理字符,但像openssl这样的工具可能会坚持你输入它( Expect 通过设置伪终端来解决这个问题)。
答案 3 :(得分:0)
您还可以使用here document直接在bash脚本中包含输入:
interactive-program <<LimitString
command #1
command #2
...
LimitString
(但@hop建议的配置文件选项仍然是最好的主意。)