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

하지만 그 중 하나는 최대 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이 이 특정 작업에 필요한 정확한 입력 순서에 대한 가정만 있습니다. 오류 검사를 원하면 expectperl Expect.pm이나 python을 사용하세요 pexpect.

관련 정보