OpenVPN easy-rsa build-key automation?

18

Mam wiele kluczy do wygenerowania dla serwera VPN moich klientów. Ilekroć używam easy-rsa do generowania takich kluczy:

./build-key client1

Jest kilka wyników z serią pytań. Wszystkie pytania mają domyślne odpowiedzi zdefiniowane w varspliku.

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

Podsumowując, muszę ręcznie nacisnąć następujące klawisze:

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

Zasadniczo akceptuję wszystkie domyślne odpowiedzi i mówię „tak” na dwa ostatnie pytania. Czy istnieją -forcelub -quietflagi lub coś, co można używać z build-key? Jeśli nie, to czy są jakieś sztuczki skryptowe lub bash, których mogę użyć, aby to zrobić za każdym razem? Nie mogę znaleźć niczego na stronach podręcznika na ten temat.

Jake Wilson
źródło

Odpowiedzi:

14

Jeśli spojrzysz na źródło build-key, zobaczysz, że dzwoni pkitool. Napisałem opakowanie, aby spakować klucze cilenta i odpowiednie pliki konfiguracyjne openvpn w archiwum, które mógłbym następnie przekazać moim użytkownikom:

#!/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
źródło
19

spróbuj flagi --batch

./build-key --batch client1
Tomot
źródło
Próbowałem tego, ale nazwa zwyczajowa to adres serwera, a nie nazwa, którą chciałem wygenerować, podobnie jak zachowanie bez flagi
partia
Dla mnie jest to odpowiedź na postawione pytanie. Oto jak zautomatyzować produkcję klucza dla większości standardowych konfiguracji i zasugerować zaakceptowanie tego jako odpowiedzi.
James Firth,
2

Najszybciej przychodzi mi do głowy expect; pozwala zautomatyzować tego rodzaju interakcje w wierszu poleceń.

Christian Paredes
źródło
3
spodziewaj się, że to przesada easy-rsa to wszystkie skrypty powłoki, więc łatwo je zhakować.
pjz
2

Nowa wersja EasyRSA jest teraz dostępna jako pojedynczy plik binarny. Aby zautomatyzować budowanie klucza klienta, możesz teraz użyć pliku „vars” (po prostu umieść go w tym samym katalogu co plik binarny 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"

i użyj pliku binarnego EasyRSA:

./easyrsa build-client-full client1 nopass
użytkownik394252
źródło
1

Miałem ten sam problem.

Znalazłem rozwiązanie:

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

Cristiano Felipe
źródło
To zadziałało dla mnie. Najbardziej mi się podoba, ponieważ nie wymaga od użytkownika zrozumienia skryptu.
AFP_555
1

Jest to podobne do tego, którego używam. Mam nadzieję, że to komuś pomaga, zajęło mi to godziny. Upewnij się, że wykonujesz polecenie w katalogu easy-rsa i nie zapomnij o źródłach ./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 
Kevin Knowlen
źródło
0

Zrobiłem opakowanie jak pjz, ale z pakietowaniem wszystkich niezbędnych plików w pojedynczy plik .ovpn, którego można używać bezpośrednio

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

if [x $ client = x]; następnie
    echo „Użycie: nazwa klienta 0 $”
    wyjście 1
fi

gdyby [ ! -e klucze / $ client.key]; następnie
    echo „Generowanie kluczy ...”
    . Vars
    ./pkitool $ client
    echo „... wygenerowano klucze.”
fi

pakiet =. / keys / $ client.ovpn

gdyby [ ! -e $ pakiet]; następnie
    echo „Tworzenie pakietu ...”
    kot klucze / template.ovpn >> $ pakiet
    echo '' >> $ pakiet
    kocie klucze / ca.crt >> $ pakiet
    echo '' >> $ pakiet
    echo '' >> $ pakiet
    echo '' >> $ pakiet
    awk '/ BEGIN CERTIFICATE /, 0' keys / $ client.crt >> $ bundle
    echo '' >> $ pakiet
    echo '' >> $ pakiet
    echo '' >> $ pakiet
    kot klucze / $ client.key >> $ pakiet
    echo '' >> $ pakiet
    echo '' >> $ pakiet
    echo „... utworzono pakiet”
jeszcze
    echo "Nic nie robić, więc nic nie zrobiono. (klucze / $ client.ovpn już istnieje)"
fi
grzechotka
źródło
0

Właśnie próbowałem zrobić to samo, generując cicho użytkowników openvpn na polu FreeBSD.

W rezultacie powstał nowy plik, o trafnej nazwie ./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
źródło
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
źródło
-2

po prostu edytuj plik klucza kompilacji i usuń --interactnajłatwiejszą metodę, o której wiem

Allan Swanepoel
źródło