クライアントの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 [[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
全体として、次のキーを手動で押す必要があります。
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
ENTER
y
ENTER
y
ENTER
基本的に私はすべてのデフォルトの回答を受け入れ、最後の2つの質問に「はい」と言っています。 -force
または-quiet
フラグ、またはbuild-key
で使用できるフラグはありますか?そうでない場合、毎回これを行うために使用できるスクリプトまたはbashのトリックはありますか?それに関するマニュアルページには何も見つかりません。
build-key
のソースを見ると、pkitool
を呼び出していることがわかります。 Cilentのキーと適切なopenvpn構成ファイルをユーザーに提供できるtarballにバンドルするラッパーを作成しました。
#!/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
-batchフラグを試す
./build-key --batch client1
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 "[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"
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
私はちょうどこれと同じことをしようとしましたが、freeBSDボックスでopenvpnユーザーを黙って生成しました。
これにより、./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"
私はこれを試しましたが、一般的な名前はサーバーアドレスでした
Uは、pkitoolを実行する前にKEY_CNを設定する必要があります
#!/ bin/bash $ USER_NAME = "$ 1" source ./vars KEY_CN=${USER_NAME} export EASY_RSA = "$ {EASY_RSA:-。}" "$ EASY_RSA/pkitool" $ {USER_NAME}
(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];次に、 echo "Usage:$ 0 clientname" exit 1 fi if [! -e keys/$ client.key];次に echo "Generating keys ..." 。 vars ./pkitool $ client echo "... keysgenerated。" fi bundle =。/ keys/$ client。 ovpn if [! -e $ bundle]; then echo "バンドルを作成しています..." 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"何もする必要がないため、何もしません。(keys/$ client.ovpnは既に存在します) " fi