OpenVPN tự động hóa khóa xây dựng dễ dàng?


18

Tôi có rất nhiều khóa để tạo cho máy chủ VPN của khách hàng. Bất cứ khi nào tôi sử dụng easy-rsa để tạo các khóa như thế này:

./build-key client1

Có một số đầu ra với một loạt các câu hỏi. Các câu hỏi đều có câu trả lời mặc định được xác định trong varstệp.

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

Nói chung, tôi phải bấm các phím sau:

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

Về cơ bản, tôi chỉ chấp nhận tất cả các câu trả lời mặc định và nói 'có' với hai câu hỏi cuối cùng. Có bất kỳ -forcehoặc -quietcờ hoặc một cái gì đó mà tôi có thể sử dụng với build-key? Nếu không, có những thủ thuật script hay bash nào tôi có thể sử dụng để làm điều này mọi lúc? Tôi không thể tìm thấy bất cứ điều gì trong bất kỳ trang người đàn ông về nó.

Câu trả lời:


14

Nếu bạn nhìn vào nguồn của build-key, bạn sẽ thấy nó đang gọi pkitool. Tôi đã viết một trình bao bọc để đóng gói các khóa của cilent và các tệp cấu hình openvpn thích hợp vào một tarball mà sau đó tôi có thể cung cấp cho người dùng của mình:

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

thử --batch cờ

./build-key --batch client1

Tôi cố gắng này, nhưng tên gọi chung là địa chỉ máy chủ, không phải là tên của họ tôi muốn tạo ra, như là hành vi mà không cờ --batch
David Poxon

Đối với tôi đây là câu trả lời cho câu hỏi được đặt ra. Đây là cách tự động hóa sản xuất khóa cho hầu hết các cấu hình tiêu chuẩn và đề nghị chấp nhận điều này làm câu trả lời.
James Firth

2

Điều tôi nghĩ đến nhanh nhất là expect; nó cho phép bạn tự động hóa các loại tương tác dòng lệnh này.


3
mong đợi là cách quá mức cho việc này; easy-rsa là tất cả các tập lệnh shell, vì vậy dễ dàng hack.
pjz

2

Phiên bản mới của EasyRSA xuất hiện dưới dạng nhị phân duy nhất ngay bây giờ. Để tự động xây dựng khóa máy khách, giờ đây bạn có thể sử dụng tệp "vars" (chỉ cần đặt nó trong cùng thư mục với tệp nhị phân 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"

và sử dụng nhị phân của EasyRSA:

./easyrsa build-client-full client1 nopass

1

Tôi đã từng gặp vấn đề tương tự.

Giải pháp tôi tìm thấy là:

tiếng vang -en "\ n \ n \ n \ n \ n \ n \ n \ ny \ ny \ n" | ./build-key client1


Điều này làm việc cho tôi. Tôi thích nó nhất vì nó không yêu cầu người dùng hiểu kịch bản.
AFP_555

1

Điều này tương tự với những gì tôi sử dụng. Hy vọng điều này sẽ giúp được ai đó, tôi đã mất hàng giờ để tìm ra điều này. Hãy chắc chắn rằng bạn đang thực hiện trong thư mục dễ dàng rsa và đừng quên nguồn ./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

Tôi đã tạo một trình bao bọc như pjz, nhưng với việc gói tất cả các tệp cần thiết vào một tệp .ovpn, có thể được sử dụng trực tiếp

#! / bin / bash
cd /etc/openvpn/easy-rsa/2.0
khách hàng = $ 1

if [x $ client = x]; sau đó
    echo "Cách sử dụng: $ 0 tên khách hàng"
    thoát 1
fi

nếu [ ! -e khóa / $ client.key]; sau đó
    echo "Tạo khóa ..."
    . lọ
    ./pkitool $ khách hàng
    echo "... các phím được tạo."
fi

bó =. / phím / $ client.ovpn

nếu [ ! -e $ bó]; sau đó
    echo "Tạo gói ..."
    khóa mèo / template.ovpn >> $ bundle
    echo '' >> bó $
    chìa khóa mèo / ca.crt >> $ bó
    echo '' >> bó $
    echo '' >> bó $
    echo '' >> bó $
    awk '/ BEGIN CHỨNG NHẬN /, 0' khóa / $ client.crt >> $ bundle
    echo '' >> bó $
    echo '' >> bó $
    echo '' >> bó $
    khóa mèo / $ client.key >> $ bundle
    echo '' >> bó $
    echo '' >> bó $
    echo "... bó được tạo"
khác
    echo "Không có gì để làm, vì vậy không có gì được thực hiện. (khóa / $ client.ovpn đã tồn tại)"
fi

0

Tôi vừa cố gắng làm điều này rất giống nhau, tạo ra người dùng openvpn âm thầm trên hộp freeBSD.

Điều này dẫn đến một tập tin mới, được đặt tên thích hợp ./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

-2

chỉ cần chỉnh sửa tệp khóa xây dựng và xóa --interacttùy chọn phương pháp đơn giản nhất mà tôi biết

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.