«Отсутствует имя для перенаправления.» ошибка при запуске команды в среде CSH - PullRequest
0 голосов
/ 09 июня 2019

Я пытаюсь сгенерировать некоторый сертификат, используя приведенную ниже команду в среде CSH:

/usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout "selfsigned.key" \
-out "selfsigned.crt" -subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=Some IP" -extensions SAN \
-config <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:Some DNS,Some IP"))

Получение Missing name for redirect ошибка.

Как я могу это исправить?

1 Ответ

0 голосов
/ 09 июня 2019

Часть вашей командной строки:

… <(cat /etc/ssl/openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:Some DNS,Some IP"))

Вы используете специфичную для Bash нотацию - процесс подстановки - дважды. В оболочке C это просто не сработает. Оболочка C не имеет ни малейшего представления, что вы имеете в виду (посмотрите на сообщение об ошибке).

Вам придется заключить команду в скрипт Bash и использовать Bash для ее выполнения. Или переосмыслите команду, чтобы вообще не использовать подстановку процессов.

Один из вариантов - создать временный файл и использовать его в команде:

set tmpfile `mktemp`
cat /etc/ssl/openssl.cnf > $tmpfile
printf "\n[SAN]\nsubjectAltName=DNS:Some DNS,Some IP\n" >> $tmpfile
/usr/bin/openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout "selfsigned.key" \
    -out "selfsigned.crt" -subj "/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=Some IP" -extensions SAN \
    -config $tmpfile
rm -f $tmpfile

Тот факт, что из-за этого временный файл может остаться без изменений, является одной из причин, по которой стандартная рекомендация не состоит в написании сценариев в оболочке C. (См. Программирование оболочки C, считающееся вредным или Десять главных причин не использовать оболочку C .) С оболочкой POSIX вы можете гарантировать, что временный файл будет удален, если вы не жестоко убьете скрипт с SIGKILL.

...