I have a lot of keys to generate for my clients VPN server. Whenever I use easy-rsa to generate the keys like this:
./build-key client1
There is some output with a series of questions. The questions all have default answers that are defined in the vars
file.
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
All in all, I have to manually press the following keys:
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
y
ENTER
y
ENTER
Basically I'm just accepting all default answers and saying 'yes' to the final two questions. Are there any -force
or -quiet
flags or something that I can use with build-key
? If not, are there are scripting or bash tricks I can use to just do this everytime? I can't find anything in any man pages about it.
try --batch flag
If you look at the source of
build-key
, you'll find it's callingpkitool
. I wrote a wrapper to bundle up the cilent's keys and the appropriate openvpn config files into a tarball I could then give to my users:The new version of EasyRSA comes as a single binary right now. To automate building a client key, you can now use "vars" file (just place it in the same directory as easyrsa binary):
and use EasyRSA's binary:
The thing that comes to my mind the quickest is
expect
; it allows you to automate these sorts of command line interactions.I had the same problem.
The solution I found was :
echo -en "\n\n\n\n\n\n\n\ny\ny\n" | ./build-key client1
This is similar to what I use. Hope this helps someone, it took me hours to figure this out. Make sure you are executing in the directory easy-rsa, and don't forget to source ./vars
I made a wrapper like pjz, but with bundling all necessary files into single .ovpn file, which can be used directly
I have just tried to do this very same thing, generating the openvpn users silently on freeBSD box.
This resulted in a new file, aptly named
./build-key-quiet
U have to set KEY_CN before run pkitool