У меня есть много ключей, которые нужно сгенерировать для VPN-сервера моих клиентов. Всякий раз, когда я использую easy-rsa для генерации таких ключей:
./build-key client1
Есть выход с серией вопросов. На все вопросы есть ответы по умолчанию, которые определены в vars
файл.
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
В общем, мне приходится вручную нажимать следующие клавиши:
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
y
ENTER
y
ENTER
В основном я просто принимаю все ответы по умолчанию и говорю «да» на два последних вопроса. Есть ли -force
или -quiet
флаги или что-то, что я могу использовать с build-key
? Если нет, есть ли уловки со сценариями или bash, которые я могу использовать, чтобы делать это каждый раз? Я не могу найти ничего об этом ни на одной странице руководства.
пытаться - партия флаг
./build-key --batch client1
Если вы посмотрите на источник build-key
, ты обнаружишь, что он звонит pkitool
. Я написал оболочку для объединения ключей cilent и соответствующих файлов конфигурации openvpn в архив, который я затем мог бы передать своим пользователям:
#!/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
Новая версия EasyRSA сейчас идет как единый двоичный файл. Чтобы автоматизировать создание клиентского ключа, теперь вы можете использовать файл "vars" (просто поместите его в тот же каталог, что и двоичный файл 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"
и используйте двоичный файл EasyRSA:
./easyrsa build-client-full client1 nopass
Самое быстрое, что приходит мне в голову, это expect
; он позволяет автоматизировать подобные взаимодействия с командной строкой.
У меня такая же проблема.
Я нашел решение:
echo -en "\ n \ n \ n \ n \ n \ n \ n \ ny \ ny \ n" | ./build-key client1
Это похоже на то, что я использую. Надеюсь, это кому-то поможет, мне потребовались часы, чтобы понять это. Убедитесь, что вы выполняете в каталоге easy-rsa, и не забудьте указать источник ./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
Я сделал обертку типа pjz, но с объединением всех необходимых файлов в один файл .ovpn, который можно использовать напрямую
#!/bin/bash cd /etc/openvpn/easy-rsa/2.0 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 bundle=./keys/$client.ovpn if [ ! -e $bundle ]; then echo "Creating bundle..." cat keys/template.ovpn >> $bundle echo '' >> $bundle cat keys/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 created" else echo "Nothing to do, so nothing done. (keys/$client.ovpn already exists)" fi
Я только что попытался сделать то же самое, беззвучно генерируя пользователей openvpn на компьютере с freeBSD.
Это привело к созданию нового файла с подходящим названием ./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"
(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
Я пробовал это, но обычным именем был адрес сервера
Вы должны установить KEY_CN перед запуском pkitool
#!/bin/bash $USER_NAME="$1" source ./vars KEY_CN=${USER_NAME} export EASY_RSA="${EASY_RSA:-.}" "$EASY_RSA/pkitool" ${USER_NAME}
просто отредактируйте файл ключа сборки и удалите --interact
вариант самый простой способ, о котором я знаю