Help us understand the problem. What is going on with this article?

OpenVPNの「.ovpn」ファイル作成シェル

概要

OpenVPNを構築して、いちいち手動で「.ovpn」ファイルを作るのが面倒だったので作りました。
一応、↓の後の手順になります。
https://qiita.com/SSMU3/items/8ea901031b2a0e7bb8f2

前提

ヘッダーを作ってファイルにまとめておく

↓こんなの(ファイル名は何でも構いません)

$ cat ovpn_heder
client
dev tun
proto udp
remote ドメイン名 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-client
key-direction 1
cipher AES-256-CBC
verb 3
tun-mtu 1500
$

ドメイン名」の部分はサーバのFQDNやIPアドレスを入力してください。

各証明書、鍵が所定の場所にある

/usr/local/EasyRSA/pki/ca.crt
/usr/local/EasyRSA/pki/private/client1.key
/usr/local/EasyRSA/pki/issued/client1.crt
/etc/openvpn/ta.key

シェルスクリプト本文

こういう簡単な作りです。

$ cat mkopvn.sh
#!/bin/bash

# サーバ証明書のパス
ca_path="/usr/local/EasyRSA/pki"
# クライアント用秘密鍵のパス
key_path="/usr/local/EasyRSA/pki/private"
# クライアント用証明書のパス
crt_path="/usr/local/EasyRSA/pki/issued"
# ta鍵のパス
ta_path="/etc/openvpn"

# 引数チェック
if [ $# -ne 2 ]; then
        echo "実行するにはヘッダーと対象のクライアントを引数にする必要があります。" 1>&2
        exit 1
fi

# 引数取得
header=$1
target=$2

# 作成開始
cat $header
echo '<ca>'
grep -A 30 'BEGIN CERTIFICATE' "$ca_path/ca.crt"
echo '</ca>'
echo '<key>'
cat "$key_path/$target.key"
echo '</key>'
echo '<cert>'
grep -A 30 'BEGIN CERTIFICATE' "$crt_path/$target.crt"
echo '</cert>'
echo '<tls-auth>'
cat "$ta_path/ta.key"
echo '</tls-auth>'

使い方

コマンド

前提で作成した「ヘッダーファイル」を第1引数に、OpenVPNに登録した「クライアント名」を第2引数にします。

$ mkopvn.sh ヘッダーファイル クライアント名

実行例

こんな感じになります。
後はOpenVPNに登録した「クライアント名」毎にコマンドを実行して、どこかにファイルをリダイレクトして
クライアント名.ovpn」とかいう名前で保存すれば、完成です。
ちなみに、私の環境では、証明書の所有権がrootで所有者以外読み取り権限がないファイルもあったので、
コマンドに「sudo」をつけて実行しています。

$ sudo ./mkopvn.sh /home/ubuntu/mkovpn/ovpn_heder client1
client
dev tun
proto udp
remote ドメイン名 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-client
key-direction 1
cipher AES-256-CBC
verb 3
tun-mtu 1500
<ca>
-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUBBEHXRlw86n0eWAiDw4PTzUeOz4wDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMTkwOTE5MTIwNzU1WhcNMjkw
OTE2MTIwNzU1WjAWMRQwEgYDVQQDDAtFYXN5LVJTQSBDQTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALKGALufJ2r/hZkHo9E0/304DMKZ5ATvs85Ds0m/
904ZuGY/cq285/K51D8+mx1M33CdfLPjISfZvNEmFCxvlB8nJdZfA7JwlvVaDcpu
Em0f8O7yX2gfFaBm/Xj8J4injO/TjmfZwohPCT0tuzS4agWnxwSllquF42r5LeJ6
OR/wGtqUNCBdbHYhB9Mk4nsH1ZcLvUs3+MIARukyh5Yw9NDrFlZZdalo0q7kFUdK
rNHpaILrekPEdWwE6ZDdrpPqzJix58gdoT34TtZCR89c0UYMekucJDtSkDrwWfQT
DrAkBjlVBaEK+rvkYikb/d+2iLFtMuWKYxMjIu+aNUpoEuUCAwEAAaOBkDCBjTAd
BgNVHQ4EFgQUKCSGAy+MotQIPng8v+CQUTuT7fIwUQYDVR0jBEowSIAUKCSGAy+M
otQIPng8v+CQUTuT7fKhGqQYMBYxFDASBgNVBAMMC0Vhc3ktUlNBIENBghQEEQdd
GXDzqfR5YCIPDg9PNR47PjAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkq
hkiG9w0BAQsFAAOCAQEAeiXx2Uia08ihVAs083VMyRrO3ZgkO+Hsg0TOkC+aXAlY
aFGoYFVkmRwlc822FTs6taQWhC8x88kR8O1AI+18udYTo6Z9L514NhkiZmtV/tJF
x4gTATKlFYeZTHNq4FLooNMDP4vtBJDoQC3xpttXpKb77hij4l4DiUqNqGe5qdJ+
rHUq/KQL8nCrPHv/7eIw5Y3nEa0V82TVqUOzQm9bVwSXXQp2spP34x073QURbshB
ILW01PD53w6IuY2xLu29mgj27U1E/+GqQTT/7xscGM/KNsOTJANdmzsuqAS7nrA6
4jjwAD7UFoiOI3oRgB7dmBdjHu35BNupSVPsVUWQPw==
-----END CERTIFICATE-----
</ca>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJuNi5EGrSSKYm
EWym1KiULyGqIpJJYLobfTp3kn3SgFt15l/xyJC1OybVgATuU/YSoBqo6vQWCI0f
8LVCNVzNFS2gJWFR8+q1MmLKkEpTk1ARWECjiFJMHAbe5FjtTnCA5w8ozsABMgXm
zylSqfXzkY93Z27U/h13UbbQVJjOH0LlTk/f+0iVqXq4CcgAOp1XUmdo7kLD6t+R
ZVofrDBiJx8uI3IzFvgNaHAEZGxPA01iHFnslgiytQZDGrIPTl1u2OQ+j6+MqqFn
UAWJY0mRz6pYJ3iwLn1ddOdUvck68uq6MyCL1u//NX8o1Tyq0Xj7PViZmx8f2KA/
QsAA2D8LAgMBAAECggEAfDl4RWeF0R/qKdFbLtYRRshLnAGUQtntYlZZNh+hmotv
R4jqlvQjoWfe/2XKI5bTGB8+q72dOSBlAEF07mP8VVNweInsh9KFPLbdvc7j5tn2
WegWTl76B2LPHF5VITbH86nXXRMNjO7oUX5L/VsrWqbOSgMJbuNa9Ar/YQZn366q
1z3OOnJrdoA8pUm/CjUdHfP6gfFggYC+YF6Y6+NUDGyhGuDsSG/Z2ICQvpUf99vY
nR3TaGblTRXNvtbojU6sK8QLMnXwiFLP5GePU/y+CySG9rEgCsbpzpTjSra8J0U+
sILyFoQ/LUUSOwxiLhALEnNFfZ0W+rO7FueoYpXzSQKBgQDkwB2eOicpS7QPej99
FJ3cMEITn8+bpfOrtYv2nGInKmMciG/Oqk2CM29wfjgLTALlb10RVJ0Pz4OwIfIn
2NlWRVuY4e7XsCyUaCu+tyhZ9OAZPb6ZkUpMc6E3FDYgnBHN4WnBwTOxCk/4Euzl
25RRsFIK2YXS6017PxNtRvFYJQKBgQDhwHvHvTR+OeTBNkcLzP5L0wr4h0KnOcQH
BnZLoMurdMTeoMrAfpfBFzmeqhuQ+mbMm04gTq7KuQRYmwesiKFUz6hR1bxViO7U
RolUbhKbRrrXr/3LvkLlUENaSxWpbrhgs0Ao1Z8rVZA8Tm1Bt0rY6h8ooAPp9XAr
NODbhpC7bwKBgAMMEBjwe18QdBiUr03SPXwWZHrwcQqIvmM2KuQhFymgZeuWYa7m
E9w9JSnhdIup+ovl3N6DOwhf4kgxW5FuUQ7WI684qz7SSPW9IYAL3oy8N1P+v5A6
IDw+ehJKwaHTkmUksIz1LuQX2BLc5az2LNadu6oLVb4GhmSy5WZaQJLFAoGBANeB
6+hSq+DwHXuA+DPAvuXdkzSL00pWb9cRCS7LUoLcFvA8aTF36CDRrhTUaTpugGJE
xEE9O8mU9Bwt6xZ+3BxdnF56/q5c6TnGGGV8KtEGpWkvvcWZXL0ScSmqUgSMCQFv
PQl+XNN+fBHGALDibFZEsfgTQYk/35OviBSpElOLAoGBALZ6c0I9/Ehoqh1BL0mM
Zpb7Z0WJYi1tzkrlqN5M4a6gEvcMAc8dz+G4wWcXZtjIN0DESHXNaHQikfNpfUvE
ENTBrDM3Axkfa3VQQHrKfP+i1va7DaJX/MQIpsf0ZCXwl/0YwvGj/dOJBEN8uTgi
9K+5ykqghJowp4HdE2HEGr4q
-----END PRIVATE KEY-----
</key>
<cert>
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIRANo4URyQckTBonYEvp8iIqMwDQYJKoZIhvcNAQELBQAw
FjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMTkwOTE5MTIyMTUyWhcNMjIwOTAz
MTIyMTUyWjATMREwDwYDVQQDDAhzLnNha2F0YTCCASIwDQYJKoZIhvcNAQEBBQAD
ggEPADCCAQoCggEBAMm42LkQatJIpiYRbKbUqJQvIaoikklguht9OneSfdKAW3Xm
X/HIkLU7JtWABO5T9hKgGqjq9BYIjR/wtUI1XM0VLaAlYVHz6rUyYsqQSlOTUBFY
QKOIUkwcBt7kWO1OcIDnDyjOwAEyBebPKVKp9fORj3dnbtT+HXdRttBUmM4fQuVO
T9/7SJWpergJyAA6nVdSZ2juQsPq35FlWh+sMGInHy4jcjMW+A1ocARkbE8DTWIc
WeyWCLK1BkMasg9OXW7Y5D6Pr4yqoWdQBYljSZHPqlgneLAufV1051S9yTry6roz
IIvW7/81fyjVPKrRePs9WJmbHx/YoD9CwADYPwsCAwEAAaOBojCBnzAJBgNVHRME
AjAAMB0GA1UdDgQWBBQeA1en8JzPELSgTty3iDJTvfxksjBRBgNVHSMESjBIgBQo
JIYDL4yi1Ag+eDy/4JBRO5Pt8qEapBgwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0GC
FAQRB10ZcPOp9HlgIg8OD081Hjs+MBMGA1UdJQQMMAoGCCsGAQUFBwMCMAsGA1Ud
DwQEAwIHgDANBgkqhkiG9w0BAQsFAAOCAQEAX/31DyclO50YBUsUoEWXRdjgYzBn
NfLi+DHYUU3fWJ8i7nw8CTgLRB9vMtpuzMz8Dpned+I2XLLJLZ4WjJ5crPt5q7X6
iXSlWOD8QXzBU6h2hWC2ZfH8hJs5jZRaP1YvdAq+LkhQYOm4CwlfgH9ODzHXKnJ5
9CO4rCtxxSqHAwB9f9b7IXcFHd0bu8j02oHKWWQow8xH84JylnQshylP1yN0z1Wu
Am3lP8LkoAoYRFCVA3BjjOzzoMR891XqfvXjIFYawivEL7Nn3Pbn9PKyESSFKCaJ
gSyk2+0maF1iTBPvd5iSF1xryf/ZIxgJoUZqn4KXauiDuRfaCcfqaUa/UQ==
-----END CERTIFICATE-----
</cert>
<tls-auth>
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
3eeac1c3c2af584d8490255987f54780
95c0fbe804de7a95351056741a6aa1a9
46496571514a26ad205bc627478f173f
3d0a50a9bc4a9a05b5125fa42fae45fd
b9bcea68a2e8a8c02aa0e4a2e94b21d6
ba15ce9b477e9ce28250a807d1e37408
3608ebf9eff09c8fa969e2fe7524183f
41df0ad935b08e26e1e61c1f767f23ac
9673f1357e4995cc3442b909a92e5c60
6571487a072648666984b87cea3e2d45
956cb1e93ea16673c729bb100445c20e
ad596935213fb1846c1d79ca94d22704
4e74eadace3c91b801f3edd84ef97726
731baecd02e6f341cbb266217ed1bea6
5af2e7c0fca376ab47e60d63455e3cd0
fa08c9b64313bf07eb750cb3245b6683
-----END OpenVPN Static key V1-----
</tls-auth>
$

雑記

えいや、で作った簡単なシェルなんで改造して適当に使ってください。
自身の環境で使えなかった場合もちょっとした改造で使えると思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away