我正在编写一个脚本,用于自动输入用户对 openssl 命令的输入,但我找不到让脚本自动输入所需密码的方法。我尝试过:
spawn sudo openssl x509 -req -in client.csr -CA /etc/mosquitto/ca_certificates/ca.crt -CAkey /etc/mosquitto/ca_certificates/ca.key -CAcreateserial -out client.crt -days 15;
expect 'Enter pass phrase for /etc/mosquitto/ca_certificates/ca.key:'
send '1234\n'
不起作用(未找到生成和发送)
printf '1234\n' | sudo openssl x509 -req -in client.csr -CA /etc/mosquitto/ca_certificates/ca.crt -CAkey /etc/mosquitto/ca_certificates/ca.key -CAcreateserial -out client.crt -days 15;
不起作用,一直等待密码,程序永远不会完成,除非我手动输入“1234”。
在其他情况下,它与 printf 一起工作:
printf 'ES\n\n\n\n\nclient'$n'\n\n\n\n' | sudo openssl req -out client.csr -key client.key -new;
我猜想如果输入被隐藏,printf 将不起作用。有什么想法吗?
答案1
答案2
创建受密码保护的密钥文件的过程需要一个密码,该密码用于存储此输出文件。因此,-passin
您使用的参数是读取输入文件。从文档:
-passin arg - 输入文件密码源。
相反,您需要适当的选项来指定输出密码,即
-passout arg - 输出文件密码源。
在这种情况下,要打开/etc/mosquitto/ca_certificates/ca.key
密钥,您需要:
sudo openssl x509 \
-passin pass:'1234' \
-req \
-in client.csr \
-CA /etc/mosquitto/ca_certificates/ca.crt \
-CAkey /etc/mosquitto/ca_certificates/ca.key
-CAcreateserial \
-out client.crt \
-days 15