OpenVPN otomatisasi build-key mudah rsa?

18

Saya memiliki banyak kunci untuk dibuat untuk server VPN klien saya. Setiap kali saya menggunakan easy-rsa untuk menghasilkan kunci seperti ini:

./build-key client1

Ada beberapa keluaran dengan serangkaian pertanyaan. Semua pertanyaan memiliki jawaban default yang ditentukan dalam varsfile.

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

Secara keseluruhan, saya harus secara manual menekan tombol berikut:

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

Pada dasarnya saya hanya menerima semua jawaban standar dan mengatakan 'ya' untuk dua pertanyaan terakhir. Apakah ada -forceatau -quietbendera atau sesuatu yang dapat saya gunakan dengan build-key? Jika tidak, apakah ada trik scripting atau bash yang bisa saya gunakan untuk melakukan hal ini setiap kali? Saya tidak dapat menemukan apa pun di halaman manual tentang hal itu.

Jake Wilson
sumber

Jawaban:

14

Jika Anda melihat sumbernya build-key, Anda akan menemukan panggilannya pkitool. Saya menulis pembungkus untuk menggabungkan kunci-kunci cilent dan file konfigurasi openvpn yang sesuai menjadi tarball yang kemudian bisa saya berikan kepada pengguna saya:

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

coba bendera --batch

./build-key --batch client1
Tomot
sumber
Saya mencoba ini, tetapi nama umum adalah alamat server, bukan nama mereka yang ingin saya hasilkan, seperti perilaku tanpa flag --batch
David Poxon
Bagi saya ini adalah jawaban untuk pertanyaan yang diajukan. Ini adalah cara mengotomatisasi produksi utama untuk sebagian besar konfigurasi standar dan menyarankan untuk menerima ini sebagai jawabannya.
James Firth
2

Hal yang terlintas di pikiran saya adalah yang tercepat expect; ini memungkinkan Anda untuk mengotomatiskan interaksi-interaksi baris perintah semacam ini.

Christian Paredes
sumber
3
berharap adalah cara yang terlalu banyak untuk ini; easy-rsa adalah semua skrip shell, jadi mudah diretas.
pjz
2

Versi baru EasyRSA hadir sebagai biner tunggal saat ini. Untuk secara otomatis membuat kunci klien, Anda sekarang dapat menggunakan file "vars" (cukup letakkan di direktori yang sama dengan binary 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"

dan gunakan binari EasyRSA:

./easyrsa build-client-full client1 nopass
pengguna394252
sumber
1

Saya memiliki masalah yang sama.

Solusi yang saya temukan adalah:

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

Cristiano Felipe
sumber
Ini berhasil untuk saya. Saya paling menyukainya karena tidak mengharuskan pengguna untuk memahami skrip.
AFP_555
1

Ini mirip dengan apa yang saya gunakan. Semoga ini bisa membantu seseorang, butuh waktu berjam-jam untuk mencari tahu ini. Pastikan Anda mengeksekusi di direktori easy-rsa, dan jangan lupa untuk mencari ./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
sumber
0

Saya membuat pembungkus seperti pjz, tetapi dengan menggabungkan semua file yang diperlukan menjadi file .ovpn tunggal, yang dapat digunakan secara langsung

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

jika [x $ client = x]; kemudian
    echo "Penggunaan: $ 0 nama klien"
    keluar 1
fi

jika [! -e keys / $ client.key]; kemudian
    gema "Menghasilkan kunci ..."
    . vars
    ./pkitool $ client
    gema "... kunci yang dihasilkan."
fi

bundle =. / keys / $ client.ovpn

jika [! -e $ bundle]; kemudian
    gema "Membuat bundel ..."
    kunci cat / template.ovpn >> $ bundle
    echo '' >> $ bundle
    kunci kucing / 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 "... bundel dibuat"
lain
    echo "Tidak ada yang bisa dilakukan, jadi tidak ada yang dilakukan. (keys / $ client.ovpn sudah ada)"
fi
rattkin
sumber
0

Saya baru saja mencoba melakukan hal yang sama, menghasilkan pengguna openvpn dalam kotak FreeBSD secara diam-diam.

Ini menghasilkan file baru, bernama tepat ./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
sumber
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
sumber
-2

cukup edit file build-key, dan hapus --interactopsi metode termudah yang saya ketahui

Allan Swanepoel
sumber