OpenVPN easy-rsa-Build-Key-Automatisierung?

18

Ich muss eine Menge Schlüssel für den VPN-Server meiner Kunden generieren. Wann immer ich easy-rsa benutze, um die Schlüssel wie folgt zu generieren:

./build-key client1

Es gibt einige Ausgaben mit einer Reihe von Fragen. Die Fragen haben alle Standardantworten, die in der varsDatei definiert sind .

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

Alles in allem muss ich die folgenden Tasten manuell drücken:

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

Grundsätzlich akzeptiere ich einfach alle Standardantworten und sage "Ja" zu den letzten beiden Fragen. Gibt es irgendwelche -forceoder -quietFlaggen oder etwas, mit dem ich arbeiten kann build-key? Wenn nicht, gibt es Skripte oder Bash-Tricks, mit denen ich das jedes Mal tun kann? Ich kann nichts in Manpages darüber finden.

Jake Wilson
quelle

Antworten:

14

Wenn Sie sich die Quelle von ansehen build-key, werden Sie feststellen, dass sie anruft pkitool. Ich habe einen Wrapper geschrieben, um die cilent-Schlüssel und die entsprechenden openvpn-Konfigurationsdateien in einem Tarball zusammenzufassen, den ich dann meinen Benutzern geben konnte:

#!/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
pjz
quelle
19

try --batch flag

./build-key --batch client1
Tomot
quelle
Ich habe es versucht, aber der allgemeine Name war die Serveradresse, nicht der Name, den ich generieren wollte, ebenso wie das Verhalten ohne die --batch-Flagge
David Poxon,
Für mich ist dies die Antwort auf die gestellte Frage. Auf diese Weise können Sie die Schlüsselerstellung für die meisten Standardkonfigurationen automatisieren und vorschlagen, dies als Antwort zu akzeptieren.
James Firth
2

Was mir am schnellsten einfällt, ist expect; Damit können Sie diese Art von Kommandozeileninteraktionen automatisieren.

Christian Paredes
quelle
3
erwarten Sie ist viel zu viel des Guten dafür; easy-rsa sind alle Shell-Skripte und daher leicht zu hacken.
pjz
2

Die neue Version von EasyRSA ist derzeit als einzelne Binärdatei erhältlich. Um die Erstellung eines Client-Schlüssels zu automatisieren, können Sie jetzt die "vars" -Datei verwenden (platzieren Sie sie einfach im selben Verzeichnis wie easyrsa binary):

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"

und benutze EasyRSAs Binary:

./easyrsa build-client-full client1 nopass
user394252
quelle
1

Ich hatte das gleiche problem

Die Lösung, die ich gefunden habe, war:

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

Cristiano Felipe
quelle
Das hat bei mir funktioniert. Mir gefällt es am besten, weil der Benutzer das Skript nicht verstehen muss.
AFP_555,
1

Das ist ähnlich dem, was ich benutze. Hoffe, das hilft jemandem. Ich habe Stunden gebraucht, um das herauszufinden. Stellen Sie sicher, dass Sie im Verzeichnis easy-rsa ausgeführt werden, und vergessen Sie nicht, ./vars als Quelle anzugeben

(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 
Kevin Knowlen
quelle
0

Ich habe einen Wrapper wie pjz erstellt, aber alle erforderlichen Dateien in einer einzigen .ovpn-Datei gebündelt, die direkt verwendet werden kann

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

if [x $ client = x]; dann
    echo "Verwendung: $ 0 clientname"
    Ausfahrt 1
fi

wenn [ ! -e Schlüssel / $ client.key]; dann
    echo "Schlüssel werden generiert ..."
    . Vars
    ./pkitool $ client
    Echo "... Schlüssel generiert."
fi

bundle =. / keys / $ client.ovpn

wenn [ ! -e $ bundle]; dann
    echo "Bundle erstellen ..."
    cat keys / template.ovpn >> $ bundle
    echo '' >> $ bundle
    Katzenschlüssel / 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 erstellt"
sonst
    echo "Nichts zu tun, also nichts getan. (keys / $ client.ovpn existiert bereits)"
fi
rattkin
quelle
0

Ich habe gerade versucht, genau dasselbe zu tun, indem ich die openvpn-Benutzer still auf freeBSD-Box generiert habe.

Dies führte zu einer neuen Datei mit dem passenden Namen ./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"
Jaroslav Pantsjoha
quelle
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
Sitesh Behera
quelle
-2

Bearbeiten Sie einfach die Build-Key-Datei und entfernen Sie die --interactOption, die mir am einfachsten bekannt ist

Allan Swanepoel
quelle