使用 HEREDOC 的 OPENSSL 自动应答密码

MLS*_*LSC 2 linux bash here-document

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

cd /etc/postfix/ssl/ && openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 <<PASS
password
password
PASS
Run Code Online (Sandbox Code Playgroud)

输出是:

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

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

我总是HEREDOC用于在 bash 上自动化我的问答并且工作正常......

这里有什么问题?

可能是因为安全问题,但是我们如何处理这样的问题呢?

我也知道这个问题,但无法解决。

我正在尝试这个:(没有结果)

#!/bin/bash
PASS="password"
printf '%s\n' "$PASS" | {
    openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 -passout fd:3
} 3<&0
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

Gra*_*eme 8

您必须添加-pass stdinforopenssl来读取stdin,否则,正如@XTian所说,它将直接从关联的tty或pts设备。没有外壳重定向可以解决这个问题。

从@Xtianman页面的同一部分给出:

stdin 从标准输入读取密码。

你可以这样做:

cd /etc/postfix/ssl/ &&
  openssl genrsa  -passout stdin -des3 -rand /etc/hosts -out smtpd.key 1024 <<PASS
password
PASS
Run Code Online (Sandbox Code Playgroud)

您也可以使用 指定密码-passout pass:,但这更不安全,因为任何用户都可以使用密码看到密码ps(请参阅@XTian 帖子中的手册页部分)。