Take my this script guacamole_resetTOTP.sh: Try also the hidden Option "-s" 😊
#!/bin/bash # wla, 06.06.2020: created if [[ "$#" = "0" || "$#" -gt 2 || "$1" = "-h" ]] ; then echo "$0 [GUAC_USER]" exit 0 fi SQL=/usr/bin/mysql DB=guacamole USER="$1" # check if user exists echo -e "Check user \"${USER}\" ... \c" ENTITY_ID=$(${SQL} ${DB} -Bse "select entity_id from guacamole_entity where name='${USER}';") test -n "${ENTITY_ID}" && USER_ID=$(${SQL} ${DB} -Bse "select user_id from guacamole_user where entity_id='${ENTITY_ID}';") if [[ -z "${ENTITY_ID}" || -z "${USER_ID}" ]] ; then echo -e "Not exist ... exit\n" exit else echo -e "Found\n user ${USER}, entity_id=${ENTITY_ID}, user_id=${USER_ID}\n" fi # before reset IS_TOTP=$(${SQL} ${DB} -Bse "select attribute_value from guacamole_user_attribute where attribute_name='guac-totp-key-confirmed' and user_id='${USER_ID}';") if [ -z "${IS_TOTP}" ] ; then echo "No TOTP initialization found for user \"${USER}\" ... nothing to do ... exit" exit else if [ "$2" = "-s" ] ; then # dump the secret to stdout ${SQL} ${DB} -Bse "select attribute_value from guacamole_user_attribute where attribute_name='guac-totp-key-secret' and user_id='${USER_ID}';" exit fi echo -e "TOTP configured before reset: ${IS_TOTP}" fi # ask read -p "Reset TOTP for user ${USER}? [ (y)es/(n)o ]: " KEY if [ "${KEY}" != "y" -a "${KEY}" != "Y" ] ; then echo -e "Cancel ...\n" exit 0 fi # new secret will be generated ${SQL} ${DB} -Bse "delete from guacamole_user_attribute where user_id='${USER_ID}';" # after reset IS_TOTP=$(${SQL} ${DB} -Bse "select attribute_value from guacamole_user_attribute where attribute_name='guac-totp-key-confirmed' and user_id='${USER_ID}';") if [ -n "${IS_TOTP}" ] ; then echo "!!! Error, please check ... !!!" exit 1 else echo "TOTP reset for user \"${USER}\" was successful!" fi echo ""