使用HEREDOC自动接听OPENSSL的密码

时间:2014-03-04 10:49:56

标签: linux bash heredoc

我有以下命令,但它对我不起作用......

cd /etc/postfix/ssl/ && openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 <<PASS
password
password
PASS

更新

输出结果为:

109 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
...............................++++++
...........++++++
e is 65537 (0x10001)
Enter pass phrase for smtpd.key:

它应该自动回答问题并自动输入密码。

我总是使用HEREDOC在bash上自动化我的Q&amp; A并且工作正常......

这里有什么问题?

2 个答案:

答案 0 :(得分:3)

OpenSSL(和OpenSSH)采取措施直接从终端读取密码,而不是从stdin读取密码作为安全措施。

但是,有很多方法可以为OpenSSL提供密码。查看man openssl部分PASS PHRASE ARGUMENTS

所以你可以这样做:

  openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 -passout "pass:mypassword"

...但是根据联机帮助页:“由于密码对于实用程序是可见的(例如Unix下的'ps'),因此只应在安全性不重要的地方使用此表单”

或者你可以这样做:

printf '%s\n' "$PASS" | {
    openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 -passout fd:3
} 3<&0

...据说比其他选项更安全,因为密码不会显示在ps中。

答案 1 :(得分:1)

正如@Graeme所说HERE

我可以像这样使用heredoc:

我必须为openssl添加-passout stdin以从stdin中读取。

cd /etc/postfix/ssl/ && openssl genrsa  -passout stdin -des3 -rand /etc/hosts -out smtpd.key 1024 <<PASS
password
PASSW