Pythonでコマンドを送信するときにbash角かっこを引用符で囲むことができることを読んだ。この例では、シェルで実行されるコマンドを使用してopensslのキーとcsrを生成しようとしていますが、Pythonで実行すると生成しません。いくつかの組み合わせを試しましたが、引き続き別の問題が発生しました。
次のPythonコマンドは失敗します。
import os
os.system('openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/[email protected]" -reqexts OPTS -config <(cat /etc/pki/tls/openssl.cnf <(printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth"))')
デフォルトのopensslコマンドが成功しました。
openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/[email protected]" -reqexts OPTS -config <(cat /etc/pki/tls/openssl.cnf <(printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth"))
これは簡単なはずですが、答えが見つかりません。
ベストアンサー1
<(…)
bash(およびkshとzsh)には存在しますが、通常のshには存在しないプロセスの置き換えです。このsystem
関数は bash ではなく sh を呼び出します。
パイプでプロセス置換を使用し、入れ子にopenssl
なったプロセス置換を簡単なコマンドシーケンスに減らすことができます。
{ cat /etc/pki/tls/openssl.cnf;
printf "[OPTS]\ basicConstraints = CA:FALSE subjectAltName = DNS:mynode,DNS:myf5 keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = serverAuth, clientAuth";
} | openssl req -nodes -newkey rsa:2048 -sha256 -keyout mynode.key -out mynode.csr -subj "/C=US/ST=Florida/L=St Petersburg/O=MyCompany/OU=MyOU/CN=mynode/[email protected]" -reqexts OPTS -config -
(改行オプション)