OpenVPN 쉬운 RSA 빌드 키 자동화?


18

클라이언트 VPN 서버에 대해 생성 할 키가 많이 있습니다. easy-rsa를 사용하여 다음과 같은 키를 생성 할 때마다 :

./build-key client1

일련의 질문이있는 결과가 있습니다. 질문에는 모두 vars파일에 정의 된 기본 답변이 있습니다 .

Generating a 1024 bit RSA private key
............................................++++++
.......................++++++
writing new private key to 'client1.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [US]:
State or Province Name (full name) [CO]:
Locality Name (eg, city) [Denver]:
Organization Name (eg, company) [mycompany]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client1]:
Email Address [it@mycompany.com]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /etc/openvpn/easy-rsa/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CO'
localityName          :PRINTABLE:'Denver'
organizationName      :PRINTABLE:'mycompany'
commonName            :PRINTABLE:'client1'
emailAddress          :IA5STRING:'it@mycompany.com'
Certificate is to be certified until Jan  3 20:16:04 2038 GMT (9999 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

대체로 다음 키를 수동으로 눌러야합니다.

ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
y
ENTER
y
ENTER

기본적으로 나는 모든 기본 답변을 수락하고 마지막 두 질문에 '예'라고 말합니다. 어떤 있습니까 -force또는 -quiet플래그 또는 내가 함께 사용할 수있는 뭔가 build-key? 그렇지 않은 경우 매번이 작업을 수행하는 데 사용할 수있는 스크립팅 또는 bash 트릭이 있습니까? 매뉴얼 페이지에서 찾을 수 없습니다.

답변:


14

의 출처를 살펴보면 build-key이라고 부르는 것을 알 수 있습니다 pkitool. 나는 cilent의 키와 적절한 openvpn 구성 파일을 tarball에 묶어 사용자에게 줄 수있는 래퍼를 작성했습니다.

#!/bin/bash

client=$1

if [ x$client = x ]; then
    echo "Usage: $0 clientname"
    exit 1
fi

if [ ! -e keys/$client.key ]; then
    echo "Generating keys..."
    . vars
    ./pkitool $client
    echo "...keys generated." 
fi

tarball=./keys/$client.tgz

if [ ! -e $tarball ]; then
    echo "Creating tarball..."
    tmpdir=/tmp/client-tar.$$
    mkdir $tmpdir
    cp company.ovpn $tmpdir/company.ovpn
    cp keys/ca.crt $tmpdir 
    cp keys/$client.key $tmpdir/client.key
    cp keys/$client.crt $tmpdir/client.crt
    tar -C $tmpdir -czvf $tarball .
    rm -rf $tmpdir
    echo "...tarball created" 
else
    echo "Nothing to do, so nothing done. (keys/$client.tgz already exists)" 
fi

19

- 배치 플래그를 사용해보십시오

./build-key --batch client1

로 --batch 플래그없는 행동이며, 나는 이것을하려고했으나 일반 이름 서버 주소가 아닌 내가 생성하고 싶었 그들은의 이름이었다
데이비드 Poxon

나에게 이것은 제기 된 질문에 대한 답변입니다. 이것이 대부분의 표준 구성에서 키 생성을 자동화하고이를 응답으로 수락하는 방법입니다.
James Firth

2

내 마음에 가장 빨리 오는 것은 expect; 이러한 종류의 명령 줄 상호 작용을 자동화 할 수 있습니다.


3
기대는 이것에 대한 과잉입니다; easy-rsa는 모든 쉘 스크립트이므로 쉽게 해킹 할 수 있습니다.
pjz

2

EasyRSA 의 새 버전은 현재 단일 바이너리로 제공됩니다. 클라이언트 키 작성을 자동화하기 위해 "vars"파일을 사용할 수 있습니다 (easyrsa 바이너리와 동일한 디렉토리에 배치).

if [ -z "$EASYRSA_CALLER" ]; then
    echo "You appear to be sourcing an Easy-RSA 'vars' file." >&2
    echo "This is no longer necessary and is disallowed. See the section called" >&2
    echo "'How to use this file' near the top comments for more details." >&2
    return 1
fi

set_var EASYRSA        "$PWD"
set_var EASYRSA_OPENSSL        "openssl"
set_var EASYRSA_PKI            "$EASYRSA/pki"
set_var EASYRSA_DN     "org"

set_var EASYRSA_REQ_COUNTRY    "Country"
set_var EASYRSA_REQ_PROVINCE   "Province"
set_var EASYRSA_REQ_CITY       "City"
set_var EASYRSA_REQ_ORG        "Org Ltd"
set_var EASYRSA_REQ_EMAIL      "vpn@example.com"
set_var EASYRSA_REQ_OU         "Infrastructure"

set_var EASYRSA_KEY_SIZE       2048

set_var EASYRSA_ALGO           rsa

set_var EASYRSA_CA_EXPIRE      3650
set_var EASYRSA_CERT_EXPIRE    365
set_var EASYRSA_CRL_DAYS       180

set_var EASYRSA_TEMP_FILE      "$EASYRSA_PKI/extensions.temp"

EasyRSA의 바이너리를 사용하십시오.

./easyrsa build-client-full client1 nopass

1

나는 같은 문제가 있었다.

내가 찾은 해결책은 다음과 같습니다.

echo -en "\ n \ n \ n \ n \ n \ n \ n \ ny \ ny \ n"| ./build-key client1


이것은 나를 위해 일했습니다. 사용자가 스크립트를 이해하지 않아도되기 때문에 가장 마음에 듭니다.
AFP_555

1

이것은 내가 사용하는 것과 유사합니다. 이것이 누군가를 돕기를 바랍니다.이를 이해하는 데 몇 시간이 걸렸습니다. easy-rsa 디렉토리에서 실행 중인지 확인하고 ./vars를 소싱하는 것을 잊지 마십시오.

(echo -en "\n\n\n\n\n\n\n\n"; sleep 1; echo -en "\n"; sleep 1; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n") | ./build-key $key_id 

0

pjz와 같은 래퍼를 만들었지 만 필요한 모든 파일을 단일 .ovpn 파일로 묶어서 직접 사용할 수 있습니다.

#! / bin / bash
CD /etc/openvpn/easy-rsa/2.0
클라이언트 = $ 1

[x $ client = x]이면; 그때
    echo "사용 : $ 0 clientname"
    1 번 출구
fi

만약 [ ! -e 키 /$client.key]; 그때
    echo "키 생성 중 ..."
    . vars
    ./pkitool $ client
    echo "... 키가 생성되었습니다."
fi

bundle =. / keys / $ client.ovpn

만약 [ ! -e $ 번들]; 그때
    echo "번들 만들기 중 ..."
    고양이 키 /template.ovpn >> $ 번들
    에코 ''>> $ 번들
    고양이 키 /ca.crt >> $ 번들
    에코 ''>> $ 번들
    에코 ''>> $ 번들
    에코 ''>> $ 번들
    awk '/ BEGIN CERTIFICATE /, 0'keys / $ client.crt >> $ 번들
    에코 ''>> $ 번들
    에코 ''>> $ 번들
    에코 ''>> $ 번들
    고양이 키 /$client.key >> $ 번들
    에코 ''>> $ 번들
    에코 ''>> $ 번들
    에코 "... 번들 생성"
그밖에
    echo "할 일이 없습니다. 아무 것도하지 않습니다. (keys / $ client.ovpn이 이미 있습니다)"
fi

0

방금 freevp 상자에서 openvpn 사용자를 자동으로 생성하여 이와 동일한 작업을 시도했습니다.

그 결과 적절하게 이름이 지정된 새 파일이 생성되었습니다. ./build-key-quiet

#!/bin/sh

# Make a certificate/private key pair using a locally generated
# root certificate.
# JP - automating my time away

cd /root/openvpn

client=$1

if [ x$client = x ];
    then
    echo "Usage: $0 clientname"
    exit 1
fi

if [ ! -e keys/$client.key ];
  then
    echo "Generating keys..."
    . ./vars
    ./pkitool $client
    echo "Great Success ...keys generated."
fi

echo 'Generating ovpn Files'
cd /root/clients
./make-client-config.sh $client
rm -rf /tmp/*.ovpn
cp /root/clients/files/$client.ovpn /tmp/
chmod 777 /root/clients/files/*.ovpn

echo "cleaning up /tmp/ of old ovpn files..."
echo "OVPN file generated and copied into /tmp/$client.ovpn"

0
(echo -en "\n\n\n\n\n\n\n\n"; sleep 1; echo -en "\n"; sleep 1; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n"; sleep 3; echo -en "yes"; echo -en "\n") | ./build-key $key_id

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.