Генерация OVPN сертификата и отправка его в RocketChat
This commit is contained in:
110
vpn_user_guest.sh
Normal file
110
vpn_user_guest.sh
Normal file
@ -0,0 +1,110 @@
|
||||
#!/bin/bash
|
||||
|
||||
EASYRSA_DIR="/etc/openvpn/guest/easy-rsa"
|
||||
CCD_DIR="/etc/openvpn/guest/ccd"
|
||||
OUTPUT_DIR="/etc/openvpn/guest/client-configs" # куда складывать .ovpn файлы
|
||||
|
||||
# Функция вывода помощи
|
||||
usage() {
|
||||
echo "Использовать: $0 username [ip_address]"
|
||||
echo " username - Common Name для сертификата"
|
||||
echo " ip_address - (optional) статический IP для клиента в ccd"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Проверка аргументов
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo Проверка аргумента
|
||||
usage
|
||||
fi
|
||||
|
||||
USERNAME=$1
|
||||
STATIC_IP=$2
|
||||
|
||||
# Проверка, существует ли уже пользователь
|
||||
if [[ -f "$EASYRSA_DIR/pki/issued/${USERNAME}.crt" ]] || [[ -f "$EASYRSA_DIR/pki/private/${USERNAME}.key" ]]; then
|
||||
echo "Ошибка: пользователь '$USERNAME' уже существует. Удалите его перед повторным созданием."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Проверяем каталоги
|
||||
for dir in "$EASYRSA_DIR" "$CCD_DIR" "$OUTPUT_DIR"; do
|
||||
if [[ ! -d "$dir" ]]; then
|
||||
echo "Каталог $dir не найден. Создаю..."
|
||||
mkdir -p "$dir"
|
||||
fi
|
||||
done
|
||||
|
||||
cd "$EASYRSA_DIR" || { echo "Не удалось перейти в каталог $EASYRSA_DIR"; exit 1; }
|
||||
|
||||
#export EASYRSA_BATCH=1 # неинтерактивный режим easy-rsa
|
||||
|
||||
# Генерация сертификата
|
||||
./easyrsa build-client-full "$USERNAME" nopass
|
||||
if [[ $? -ne 0 ]]; then
|
||||
echo "Ошибка подписи сертификата для $USERNAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Сертификат для пользователя '$USERNAME' успешно создан."
|
||||
|
||||
# Создаем файл для ccd если задан IP
|
||||
if [[ -n "$STATIC_IP" ]]; then
|
||||
CCD_FILE="$CCD_DIR/$USERNAME"
|
||||
echo "ifconfig-push $STATIC_IP 255.255.255.0" > "$CCD_FILE"
|
||||
echo "Файл $CCD_FILE создан с IP-адресом $STATIC_IP"
|
||||
fi
|
||||
|
||||
# Пути к файлам сертификата и ключа клиента
|
||||
CLIENT_KEY="$EASYRSA_DIR/pki/private/$USERNAME.key"
|
||||
CLIENT_CERT="$EASYRSA_DIR/pki/issued/$USERNAME.crt"
|
||||
CA_CERT="$EASYRSA_DIR/pki/ca.crt"
|
||||
|
||||
# Проверяем, что все нужные файлы есть
|
||||
for f in "$CLIENT_KEY" "$CLIENT_CERT" "$CA_CERT"; do
|
||||
if [[ ! -f "$f" ]]; then
|
||||
echo "Файл $f не найден. Прервать."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
# Генерация .ovpn файла
|
||||
OVPN_FILE="$OUTPUT_DIR/$USERNAME.ovpn"
|
||||
|
||||
{
|
||||
cat << EOF
|
||||
client
|
||||
dev tun
|
||||
proto tcp
|
||||
remote v.maverik.ru 1194
|
||||
resolv-retry infinite
|
||||
remote-cert-tls server
|
||||
persist-key
|
||||
persist-tun
|
||||
#cipher AES-128-CBC
|
||||
comp-lzo
|
||||
verb 3
|
||||
sndbuf 0
|
||||
rcvbuf 0
|
||||
#status /var/log/openvpn/openvpn-status.log 1
|
||||
#status-version 3
|
||||
#log-append /var/log/openvpn/openvpn-client.log
|
||||
;mute 20
|
||||
|
||||
EOF
|
||||
# cat "$BASE_CONFIG"
|
||||
echo
|
||||
echo "<ca>"
|
||||
cat "$CA_CERT"
|
||||
echo "</ca>"
|
||||
echo "<cert>"
|
||||
# В сертификате убирать строки BEGIN/END, иначе дублируем - лучше так:
|
||||
awk '/-----BEGIN CERTIFICATE-----/{flag=1} flag; /-----END CERTIFICATE-----/{flag=0}' "$CLIENT_CERT"
|
||||
echo "</cert>"
|
||||
echo "<key>"
|
||||
cat "$CLIENT_KEY"
|
||||
echo "</key>"
|
||||
} > "$OVPN_FILE"
|
||||
|
||||
python3.9 /root/scripts/rocketchat.py $OVPN_FILE
|
||||
echo "Файл клиента $(basename $OVPN_FILE) успешно создан и отпавлен в RocketChat."
|
||||
Reference in New Issue
Block a user