diff --git a/create_key_config.sh b/create_key_config.sh index b884643..93dfaa5 100755 --- a/create_key_config.sh +++ b/create_key_config.sh @@ -97,8 +97,52 @@ echo_skipped() { echo -e "\033[80G[ \033[37mskipped\033[m ]" } +detect_os_1 () { + + if $(which lsb_release > /dev/null 2>&1) ; then + + os_dist="$(lsb_release -i | awk '{print tolower($3)}')" + os_version="$(lsb_release -r | awk '{print tolower($2)}')" + os_codename="$(lsb_release -c | awk '{print tolower($2)}')" + + if [[ "$os_dist" = "debian" ]]; then + if $(echo "$os_version" | grep -q '\.') ; then + os_version=$(echo "$os_version" | cut --delimiter='.' -f1) + fi + fi + + elif [[ -e "/etc/os-release" ]]; then + + . /etc/os-release + + os_dist=$ID + os_version=${os_version_ID} + + fi + + # remove whitespace from os_dist and os_version + os_dist="${os_dist// /}" + os_version="${os_version// /}" + +} + + trap clean_up SIGHUP SIGINT SIGTERM +#--------------------------------------- +#----------------------------- +# Check some prerequisites +#----------------------------- +#--------------------------------------- + +# - Set variable +# - os_dist +# - os_version +# - os_codename +# - +detect_os_1 + + clear echo "" @@ -197,6 +241,29 @@ fi EASY_RSA_DIR="${OPENVPN_BASE_DIR}/easy-rsa" +if [[ -d "${OPENVPN_BASE_DIR}/pki" ]] ; then + EASYRSA_LAYOUT_NEW=true +else + EASYRSA_LAYOUT_NEW=false +fi + +if [[ -z "$OPENVPN_KEY_DIR" ]] ; then + if $EASYRSA_LAYOUT_NEW ; then + OPENVPN_KEY_DIR="${OPENVPN_BASE_DIR}/pki" + else + OPENVPN_KEY_DIR="${OPENVPN_BASE_DIR}/keys" + fi +fi + +if [[ -z "$OPENVPN_CCD_DIR" ]] ; then + if $EASYRSA_LAYOUT_NEW ; then + OPENVPN_CCD_DIR="${OPENVPN_BASE_DIR}/ccd" + else + OPENVPN_CCD_DIR="${OPENVPN_BASE_DIR}/ccd/server-${OPENVPN_NAME}" + fi +fi +_CA_CERT="${OPENVPN_KEY_DIR}/ca.crt" +_TA_KEY="${OPENVPN_KEY_DIR}/ta.key" echo "" @@ -216,6 +283,23 @@ if [ -z "$NEW_KEY_NAME" ]; then done fi +if $EASYRSA_LAYOUT_NEW ; then + _CLIENT_CERT="${OPENVPN_KEY_DIR}/issued/${KEY_CN}-${NEW_KEY_NAME}.crt" + _CLIENT_KEY="${OPENVPN_KEY_DIR}/private/${KEY_CN}-${NEW_KEY_NAME}.key" +else + _CLIENT_CERT="${OPENVPN_KEY_DIR}/${NEW_KEY_NAME}.crt" + _CLIENT_KEY="${OPENVPN_KEY_DIR}/${NEW_KEY_NAME}.key" +fi + +if [[ ! -f "${_CLIENT_KEY}" ]]; then + fatal "Key for '$NEW_KEY_NAME' not found" +fi + +for _name in $key_names_reserverd ; do + [[ "$_name" = "$NEW_KEY_NAME" ]] && fatal "Name '$NEW_KEY_NAME' cannot be used - its a reserved name!" +done + + echo "" echo -e "\033[32m--\033[m" echo "" @@ -230,14 +314,6 @@ if [[ -z "$(trim $KEY_PW)" ]] ; then fi -for _name in $key_names_reserverd ; do - [[ "$_name" = "$NEW_KEY_NAME" ]] && fatal "Name '$NEW_KEY_NAME' cannot be used - its a reserved name!" -done - -if [[ ! -f "${OPENVPN_BASE_DIR}/keys/${NEW_KEY_NAME}.key" ]]; then - fatal "Key '$NEW_KEY_NAME' not found!" -fi - echo "" echo -e "\033[32m--\033[m" @@ -275,7 +351,7 @@ if getent passwd "$user_name" > /dev/null 2>&1; then else fatal "User '$user_name' does not exist!" fi -target_dir="${_home_dir}/VPN" +_target_dir="${_home_dir}/VPN/${KEY_CN}-${NEW_KEY_NAME}" clear @@ -285,8 +361,10 @@ echo "Create OpenVPN configuration and save also key material." echo -e "\033[32m==========\033[m" echo "" echo "Key Name ...............: $NEW_KEY_NAME" +echo "Client Key..............: $(basename "$_CLIENT_KEY")" +echo "Client Cert.............: $(basename "$_CLIENT_CERT")" echo "Key Password............: $KEY_PW" -echo "Target directory........: $target_dir" +echo "Target directory........: $_target_dir" info "Going to create configuration for key \033[37m\033[1m${NEW_KEY_NAME}.key\033[m.." echo -n "To continue type uppercase 'YES': " @@ -307,18 +385,6 @@ fi echo "" -# --- -# - source file vars -# --- -echononl " Load configuration '${EASY_RSA_DIR}/vars'.." -source ${EASY_RSA_DIR}/vars > "$log_file" 2>&1 -if [[ $? -eq 0 ]] ; then - echo_ok -else - echo_failed - error "$(cat $log_file)" -fi - _client_conf_dir="${OPENVPN_BASE_DIR}/client-configs" _client_conf_file="${_client_conf_dir}/${NEW_KEY_NAME}.conf" @@ -392,7 +458,7 @@ persist-tun EOF -_file="${OPENVPN_BASE_DIR}/keys/ca.crt" +_file="${_CA_CERT}" _found=false while IFS='' read -r line || [[ -n $line ]]; do if [[ "$line" =~ "-----BEGIN" ]] ; then @@ -413,7 +479,7 @@ cat << EOF >> "$_client_conf_file" 2> $log_file EOF -_file="${OPENVPN_BASE_DIR}/keys/${NEW_KEY_NAME}.crt" +_file="${_CLIENT_CERT}" _found=false while IFS='' read -r line || [[ -n $line ]]; do if [[ "$line" =~ "-----BEGIN" ]] ; then @@ -434,7 +500,7 @@ cat << EOF >> "$_client_conf_file" 2> $log_file EOF -_file="${OPENVPN_BASE_DIR}/keys/${NEW_KEY_NAME}.key" +_file="${_CLIENT_KEY}" _found=false while IFS='' read -r line || [[ -n $line ]]; do if [[ "$line" =~ "-----BEGIN" ]] ; then @@ -483,7 +549,7 @@ key-direction 1 EOF -_file="${OPENVPN_BASE_DIR}/keys/ta.key" +_file="${_TA_KEY}" _found=false while IFS='' read -r line || [[ -n $line ]]; do if [[ "$line" =~ "-----BEGIN" ]] ; then @@ -568,9 +634,10 @@ else fi echo "" -echononl " Create directory '$target_dir'.." -if [[ ! -d "$target_dir" ]] ; then - mkdir "$target_dir" > $log_file 2>&1 + +echononl " Create directory '$(dirname "$_target_dir")'.." +if [[ ! -d "$(dirname "$_target_dir")" ]] ; then + mkdir "$(dirname "$_target_dir")" > $log_file 2>&1 if [[ $? -eq 0 ]] ; then echo_ok else @@ -582,58 +649,54 @@ else fi _failed=false -echononl " Copy key material into dir '${target_dir}/${KEY_CN}-${NEW_KEY_NAME}'.." -if [[ -d "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" ]]; then - mv "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}.$_date" > $log_file 2>&1 +echononl " Copy key material into dir '${_target_dir}/${KEY_CN}-${NEW_KEY_NAME}'.." +if [[ -d "${_target_dir}" ]]; then + mv "${_target_dir}" "${_target_dir}.$_date" > $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi fi -mkdir "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" > $log_file 2>&1 +mkdir "${_target_dir}" > $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi -cp -a "${OPENVPN_BASE_DIR}/keys/${NEW_KEY_NAME}.key" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" >> $log_file 2>&1 +cp -a "${_CLIENT_KEY}" "${_target_dir}" >> $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi if [[ -n "$ORG_SHORTCUT" ]]; then - cp -a "$_client_conf_file" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/${ORG_SHORTCUT}-${NEW_KEY_NAME}.conf" + cp -a "$_client_conf_file" "${_target_dir}/${ORG_SHORTCUT}-$(basename $_client_conf_file)" >> $log_file 2>&1 else - cp -a "$_client_conf_file" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/${KEY_CN/VPN-/}-${NEW_KEY_NAME}.conf" + cp -a "$_client_conf_file" "${_target_dir}/${KEY_CN/VPN-/}-$(basename $_client_conf_file)" >> $log_file 2>&1 fi if [[ $? -ne 0 ]] ; then _failed=true fi -#cp -a "$_client_conf_file" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/client-$(basename $_client_conf_file)" -#if [[ $? -ne 0 ]] ; then -# _failed=true -#fi -cp -a "$_client_conf_file" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/${KEY_CN}-${NEW_KEY_NAME}.ovpn" +cp -a "$_client_conf_file" "${_target_dir}/${KEY_CN}-${NEW_KEY_NAME}.ovpn" if [[ $? -ne 0 ]] ; then _failed=true fi -cp -a "${OPENVPN_BASE_DIR}/keys/${NEW_KEY_NAME}.crt" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" >> $log_file 2>&1 +cp -a "${_CLIENT_CERT}" "${_target_dir}/" >> $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi -cp -a "${OPENVPN_BASE_DIR}/keys/ca.crt" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" >> $log_file 2>&1 +cp -a "${_CA_CERT}" "${_target_dir}" >> $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi -cp -a "${OPENVPN_BASE_DIR}/keys/ta.key" "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}" >> $log_file 2>&1 +cp -a "${_TA_KEY}" "${_target_dir}" >> $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi -cat << EOF > "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/passwd.txt" - key...............: ${NEW_KEY_NAME}.key - common name.......: ${KEY_CN}-${NEW_KEY_NAME} +cat << EOF > "${_target_dir}/passwd.txt" + key...............: $(basename "$_CLIENT_KEY") + common name.......: $(basename "${_CLIENT_KEY%.*}") password..........: ${KEY_PW} EOF if [[ $? -ne 0 ]] ; then _failed=true fi -echo "${KEY_PW}" > "${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/ovpn_pass" +echo "${KEY_PW}" > "${_target_dir}/ovpn_pass" if [[ $? -ne 0 ]] ; then _failed=true fi @@ -655,8 +718,9 @@ fi # - If the configuration file contains all keys/certs, only the configuration file # - with its suffix '.ovpn' is needed. # - +_failed=false echononl " Create zip archive '${KEY_CN}-${NEW_KEY_NAME}.tblk.zip' for MAC OS .." -target_macos_tblk_dir="${target_dir}/${KEY_CN}-${NEW_KEY_NAME}/${KEY_CN}-${NEW_KEY_NAME}.tblk" +target_macos_tblk_dir="${_target_dir}/${KEY_CN}-${NEW_KEY_NAME}.tblk" mkdir "$target_macos_tblk_dir" > $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true @@ -669,7 +733,7 @@ cp -a "$_client_conf_file" "${target_macos_tblk_dir}/Contents/Resources/config.o if [[ $? -ne 0 ]] ; then _failed=true fi -cd ${target_dir}/${KEY_CN}-${NEW_KEY_NAME} >> $log_file 2>&1 +cd "${_target_dir}" >> $log_file 2>&1 if [[ $? -ne 0 ]] ; then _failed=true fi @@ -700,7 +764,7 @@ fi -info "Key material and OpenVPN for key \033[37m\033[1m${NEW_KEY_NAME}.key\033[m is stored at '${_home_dir}/VPN'" +info "Key material and OpenVPN config for \033[37m\033[1m${NEW_KEY_NAME}\033[m is stored at '${_home_dir}/VPN'" clean_up 0