Senha de atendimento automático para OPENSSL usando HEREDOC [closed]

2

Eu tenho o seguinte comando, mas não funciona para mim ...

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

A saída é:

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

Deverá responder automaticamente a pergunta e colocar a senha automaticamente.

Eu sempre uso HEREDOC para automatizar meu Q & A no bash e funciona bem ...

Qual é o problema aqui?

Pode ser devido a problemas de segurança, mas como podemos lidar com esses problemas?

Eu também sei sobre isso questionar mas não conseguiu resolvê-lo.

Estou tentando este: (sem resultado)

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

alguma ideia?

    
por MLSC 04.03.2014 / 12:14

2 respostas

7

Você precisa adicionar -pass stdin para openssl para ler stdin , ou então, como @XTian diz, ele lerá a senha diretamente do dispositivo tty ou pts associado. Nenhum redirecionamento de shell resolverá isso.

Na mesma seção da página man que @XTian , deu:

stdin read the password from standard input.

Você pode fazer algo assim:

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

Você também pode especificar a senha usando -passout pass: , mas isso é ainda menos seguro, já que a senha pode ser vista por qualquer usuário usando ps (veja a seção da página man em @ Post do XTian ).

    
por 04.03.2014 / 13:00
4

Isso ocorre porque o openssl abre deliberadamente /dev/tty o terminal de controle, para evitar exatamente o que você está tentando fazer.

No entanto, existem vários mecanismos para especificar uma senha, a seguinte opção é apenas a primeira da página de manual (veja abaixo), escolha qual é a mais apropriada para você.

-passout pass:abcd

De man openssl

PASS PHRASE ARGUMENTS Several commands accept password arguments, typically using -passin and -passout for input and output passwords respectively. These allow the password to be obtained from a variety of sources. Both of these options take a single argument whose format is described below. If no password argument is given and a password is required then the user is prompted to enter one: this will typically be read from the current terminal with echoing turned off.

   pass:password
             the actual password is password. Since the password is visible to utilities (like
             'ps' under Unix) this form should only be used where security is not important.

   env:var   obtain the password from the environment variable var. Since the environment of
             other processes is visible on certain platforms (e.g. ps under certain Unix OSes)
             this option should be used with caution.

   file:pathname
             the first line of pathname is the password. If the same pathname argument is
             supplied to -passin and -passout arguments then the first line will be used for
             the input password and the next line for the output password. pathname need not
             refer to a regular file: it could for example refer to a device or named pipe.

   fd:number read the password from the file descriptor number. This can be used to send the
             data via a pipe for example.

   stdin     read the password from standard input.
    
por 04.03.2014 / 12:37