web-dev-qa-db-ja.com

OpenVPN Easy-RSAビルドキーの自動化?

クライアントの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 [[email protected]]:

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:'[email protected]'
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

基本的に私はすべてのデフォルトの回答を受け入れ、最後の2つの質問に「はい」と言っています。 -forceまたは-quietフラグ、またはbuild-keyで使用できるフラグはありますか?そうでない場合、毎回これを行うために使用できるスクリプトまたはbashのトリックはありますか?それに関するマニュアルページには何も見つかりません。

18
Jake Wilson

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
14
pjz

-batchフラグを試す

./build-key --batch client1
19
Tomot

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      "[email protected]"
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
4
user394252

私の頭に浮かぶのはexpectです。この種のコマンドライン操作を自動化できます。

2

同じ問題がありました。

私が見つけた解決策は:

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

2

これは私が使用するものに似ています。これが誰かを助けることを願って、これを理解するのに何時間もかかりました。 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 
1
Kevin Knowlen

私はちょうどこれと同じことをしようとしましたが、freeBSDボックスで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

私はこれを試しましたが、一般的な名前はサーバーアドレスでした

Uは、pkitoolを実行する前にKEY_CNを設定する必要があります

#!/ bin/bash 
 $ USER_NAME = "$ 1" 
 source ./vars
KEY_CN=${USER_NAME}
export EASY_RSA = "$ {EASY_RSA:-。}" 
 "$ EASY_RSA/pkitool" $ {USER_NAME} 
0
Hanz0xFE
(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
Sitesh Behera

私はpjzのようなラッパーを作成しましたが、必要なすべてのファイルを単一の.ovpnファイルにバンドルして、直接使用できます

#!/ bin/bash 
 cd /etc/openvpn/easy-rsa/2.0
client=$1

if [x $ client = x];次に、
 echo "Usage:$ 0 clientname" 
 exit 1 
 fi 
 
 if [! -e keys/$ client.key];次に
 echo "Generating keys ..." 
。 vars 
 ./pkitool $ client 
 echo "... keysgenerated。" 
 fi 
 
 bundle =。/ keys/$ client。 ovpn 
 
 if [! -e $ bundle]; then 
 echo "バンドルを作成しています..." 
 cat keys/template.ovpn >> $ bundle 
 echo '' >> $ bundle 
 cat keys/ca .crt >> $ bundle 
 echo '' >> $ bundle 
 echo '' >> $ bundle 
 echo '' >> $ bundle 
 awk '/ BEGIN CERTIFICATE /、0 'keys/$ client.crt >> $ bundle 
 echo' '>> $ bundle 
 echo' '>> $ bundle 
 echo' '>> $ bundle 
 cat keys/$ client.key >> $ bundle 
 echo '' >> $ bundle 
 echo '' >> $ bundle 
 echo "。 ..bundle created "
 else 
 echo"何もする必要がないため、何もしません。(keys/$ client.ovpnは既に存在します) "
 fi 
0
rattkin