Как использовать команду tee внутри дочернего процесса (exec)? - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь использовать команду tee внутри exec, но не могу получить никакого прогресса.Моя команда преобразует PFX в сертификат PEM, используя openssl, например:

openssl pkcs12 -in MYCERT.pfx -nodes -passin pass:123456 | tee >(openssl pkey -outform PEM) >(openssl x509 -outform PEM)

Вывод на терминал:

# first command output (PFX to PEM)
Bag Attributes
    localKeyID: 1A 0F 62 99 24 06 E7 AE D7 0F 11...

-----BEGIN CERTIFICATE-----
MIIH+zCCBeOgAwIBAgIQXSw4HKLTQrztT3ENqlcWfjANBgkqhkiG9w0BAQsFADB4
MQswCQYDVQQGEwJCUjETMB ...
-----END CERTIFICATE-----

# second command output (public key)
-----BEGIN CERTIFICATE-----
MIIH+zCCBeOgAwIBAgIQXSw4HKLTQrztT3ENqlcWfjANBgkqhkiG9w0BAQsFADB4
MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXN...
-----END CERTIFICATE-----

# third command output (private key)
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDES17GiaEXojOa
EoK5cf5mJp+saKXst3uqbznnf...
-----END PRIVATE KEY-----

Первая часть приведенной выше команды преобразует мой файл PFX в файл PEM(openssl pkcs12 -in MYCERT.pfx -nodes -passin pass:123456).

Вскоре после этого содержимое с первого отправляется второй команде (openssl pkey -outform PEM), где я извлекаю свой закрытый ключ, и третьей команде (openssl x509 -outform PEM), где я извлекаю свойоткрытый ключ.

Отлично работает на терминале Linux, но не работает при использовании exec.

Код моего узла:

const fs = require('fs');
const path = require('path');
const uuid = require('uuid/v4');
const { exec } = require('child_process');

exports.readPkcs12 = (pfx, password, callback) => {
  const fileName = path.join('/', 'tmp', `${uuid()}.pfx`);
  fs.writeFileSync(fileName, pfx);

  exec(
    `openssl pkcs12 -in ${fileName} -nodes -passin pass:${password} | tee >(openssl x509 -outform PEM) >(openssl pkey -outform PEM)`,
    (error, stdout, _stderr) => {
      console.log(stdout, error);
      if (error) return callback(error);
      callback(null, stdout);
    }
  );
};

Вывод ошибки:

 { Error: Command failed: openssl pkcs12 -in /tmp/5dcee6b8-6b25-4765-bd17-c0a84d2bcbb5.pfx -nodes -passin pass:brlog18 | tee >(openssl x509 -outform PEM) >(openssl pkey -outform PEM)
/bin/sh: 1: Syntax error: "(" unexpected

    at ChildProcess.exithandler (child_process.js:299:12)
    at ChildProcess.emit (events.js:193:13)
    at ChildProcess.EventEmitter.emit (domain.js:481:20)
    at maybeClose (internal/child_process.js:999:16)
    at Socket.stream.socket.on (internal/child_process.js:403:11)
    at Socket.emit (events.js:193:13)
    at Socket.EventEmitter.emit (domain.js:481:20)
    at Pipe._handle.close (net.js:614:12)
  killed: false,
  code: 2,
  signal: null,
  cmd:
   'openssl pkcs12 -in /tmp/5dcee6b8-6b25-4765-bd17-c0a84d2bcbb5.pfx -nodes -passin pass:brlog18 | tee >(openssl x509 -outform PEM) >(openssl pkey -outform PEM)' }

Я бы хотел выполнить эту команду таким образом, потому что смогу получить закрытый и открытый ключ с помощью одной команды exec.

Может кто-нибудь мне помочь?

Большое спасибо.

...