Bashスクリプトでコマンドに自動的にテキストを入力する

Bashスクリプトでコマンドに自動的にテキストを入力する

私の質問は他の質問と非常によく似ています。ここしかし、全く同じではありません。 SSLキー/crtなどを生成する一連のコマンドがあります。自動基本項目を作成したいと思います。これはコマンドです(次に由来)。このページ):

openssl genrsa -des3 -out server.key 2048
openssl req -new -key server.key -out server.csr
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

みんなが大丈夫だと主張するだけだと思う​​なら、私は次のようにします。

openssl genrsa -des3 -out server.key 2048 <<< arg1

ただし、そのうちの1つは最大10個の入力を順番に要求する必要があります。

私は成功せずにこのようなことを試しました。

openssl genrsa -des3 -out server.key 2048 << foo
arg1
arg2
foo

編集:このアプローチは実際には機能しますが、パスワードと見なされるパラメータには機能しないと思います。誰にも解決策はありますか?

一部のパラメータがパスワードの場合は違いがありますか?

この問題を解決する最も簡単な方法は何ですか?

答え1

これは期待どおりに機能します...私は長年にわたって証明書を生成するためにopensslにheredocsを配管してきました(たとえば、2002年に以下のスクリプトを作成しました。これはスクリプトの「新しい」バージョンです...知りませんでした) )私が最初に書いたときにそうしました)。

あなたは提供する必要がありますみんなopensslは、入力の一部が空の行であっても、期待した正確な順序で入力を期待します(デフォルトは適用)。

たとえば、postfixの自己署名証明書を生成するためのスクリプト(少し編集されたバージョン)は次のとおりです。

#! /bin/sh

umask 077

# $site is used for the subdir to hold the certs AND for
# the certificate's Common Name
site="$1"
mkdir -p $site

umask 277

REQ="$site/key.pem"
CERT="$site/cert.pem"
SERV="$site/server.pem"
FING="$site/cert.fingerprint"

# certificate details for herenow script (configurable)
COUNTRY="AU"                # 2 letter country-code
STATE="Victoria"            # state or province name
LOCALITY="Melbourne"        # Locality Name (e.g. city)
ORGNAME="organisation name" # Organization Name (eg, company)
ORGUNIT=""                  # Organizational Unit Name (eg. section)
EMAIL="[email protected]"    # certificate's email address
# optional extra details
CHALLENGE=""                # challenge password
COMPANY=""                  # company name

DAYS="-days 365"

# create the certificate request
cat <<__EOF__ | openssl req -new $DAYS -nodes -keyout $REQ -out $REQ
$COUNTRY
$STATE
$LOCALITY
$ORGNAME
$ORGUNIT
$site
$EMAIL
$CHALLENGE
$COMPANY
__EOF__

# sign it - will ask for demoCA's password
openssl ca $DAYS -policy policy_anything -out $CERT -infiles $REQ

# cert has to be readable by postfix
chmod 644 $CERT

# create server.pem for smtpd by concatenating the certificate (cert.pem) +
# demoCA's public certificate + the host's private key (key.pem)
cat $CERT ./demoCA/cacert.pem $REQ >$SERV

# create fingerprint file
openssl x509 -fingerprint -in $CERT -noout > $FING

注:これにはエラーチェックはなく、opensslがこの特定の操作に必要な正確な入力順序の前提のみです。エラーチェックが必要な場合は、expectperlExpect.pmまたはpythonを使用してくださいpexpect

関連情報