v-change-wordpress-admin-passwords

This commit is contained in:
Peca 2025-06-29 00:59:18 +02:00
commit b8b75f0dde

View file

@ -25,6 +25,13 @@ WP_PATH="/home/$USER/web/$DOMAIN/public_html"
# WP-CLI wrapper # WP-CLI wrapper
WP_RUN=(/usr/local/vesta/bin/v-run-wp-cli $DOMAIN --skip-plugins --skip-themes) WP_RUN=(/usr/local/vesta/bin/v-run-wp-cli $DOMAIN --skip-plugins --skip-themes)
return_code=$?
if [ $return_code -ne 0 ]; then
echo "WP-CLI error:"
cat /home/$USER/web/$DOMAIN/wp-cli-error.log
exit $return_code
fi
# random 10-char password # random 10-char password
gen_pass() { tr -dc 'A-Za-z0-9' </dev/urandom | head -c 10; } gen_pass() { tr -dc 'A-Za-z0-9' </dev/urandom | head -c 10; }
@ -38,9 +45,13 @@ echo
echo "WordPress administrators for $DOMAIN:" echo "WordPress administrators for $DOMAIN:"
echo "-------------------------------------" echo "-------------------------------------"
if [ -f /home/$USER/web/$DOMAIN/wp-admin-password-change.txt ]; then
rm /home/$USER/web/$DOMAIN/wp-admin-password-change.txt
fi
ADMIN_LIST_CSV=$("${WP_RUN[@]}" user list --role=administrator \ ADMIN_LIST_CSV=$("${WP_RUN[@]}" user list --role=administrator \
--fields=ID,user_login,user_email \ --fields=ID,user_login,user_email \
--format=csv 2>/dev/null | tail -n +2) --format=csv --skip-plugins --skip-themes 2>/dev/null | tail -n +2)
[ -z "$ADMIN_LIST_CSV" ] && { echo "No administrator accounts found."; exit 0; } [ -z "$ADMIN_LIST_CSV" ] && { echo "No administrator accounts found."; exit 0; }
printf "%-6s %-20s %s\n" "ID" "Username" "Email" printf "%-6s %-20s %s\n" "ID" "Username" "Email"
@ -59,7 +70,8 @@ while IFS=',' read -r ID LOGIN EMAIL; do
read -r -p "Action for \"$TARGET\" [d/c/s/x]? " ACT < /dev/tty read -r -p "Action for \"$TARGET\" [d/c/s/x]? " ACT < /dev/tty
case "$ACT" in case "$ACT" in
[Dd]* ) [Dd]* )
read -r -p "Really DELETE \"$TARGET\" ? (y/n, default: y) " CONF < /dev/tty # read -r -p "Really DELETE \"$TARGET\" ? (y/n, default: y) " CONF < /dev/tty
CONF="y"
if [[ ! "$CONF" =~ ^[Nn]$ ]]; then if [[ ! "$CONF" =~ ^[Nn]$ ]]; then
# build an array of OTHER admin usernames # build an array of OTHER admin usernames
mapfile -t OTHER_USERS < <(echo "$ADMIN_LIST_CSV" | awk -F',' -v cur="$ID" '$1!=cur {print $2}') mapfile -t OTHER_USERS < <(echo "$ADMIN_LIST_CSV" | awk -F',' -v cur="$ID" '$1!=cur {print $2}')
@ -70,7 +82,7 @@ while IFS=',' read -r ID LOGIN EMAIL; do
DEFAULT_USER="${OTHER_USERS[0]}" DEFAULT_USER="${OTHER_USERS[0]}"
echo "Available admin usernames for reassignment: ${OTHER_USERS[*]}" echo "Available admin usernames for reassignment: ${OTHER_USERS[*]}"
while true; do while true; do
read -r -p "Reassign content to which username? [default $DEFAULT_USER] " REASSIGN < /dev/tty read -r -p "Reassign content to which username? [default: $DEFAULT_USER] " REASSIGN < /dev/tty
REASSIGN=${REASSIGN:-$DEFAULT_USER} REASSIGN=${REASSIGN:-$DEFAULT_USER}
if printf '%s\n' "${OTHER_USERS[@]}" | grep -qx "$REASSIGN"; then if printf '%s\n' "${OTHER_USERS[@]}" | grep -qx "$REASSIGN"; then
break break
@ -79,8 +91,13 @@ while IFS=',' read -r ID LOGIN EMAIL; do
fi fi
done done
# delete by username, reassign by username # delete by username, reassign by username
"${WP_RUN[@]}" user delete "$LOGIN" --reassign="$REASSIGN" --yes >/dev/null 2>&1 "${WP_RUN[@]}" user delete "$LOGIN" --reassign="$REASSIGN" --yes --skip-plugins --skip-themes
if [ $? -eq 0 ]; then
echo "$TARGET deleted (content reassigned to $REASSIGN)." echo "$TARGET deleted (content reassigned to $REASSIGN)."
else
cat /home/$USER/web/$DOMAIN/wp-cli-error.log
echo "Failed to delete $TARGET."
fi
else else
echo "Deletion cancelled." echo "Deletion cancelled."
fi fi
@ -88,9 +105,14 @@ while IFS=',' read -r ID LOGIN EMAIL; do
;; ;;
[Cc]* ) [Cc]* )
NEW_PASS=$(gen_pass) NEW_PASS=$(gen_pass)
if "${WP_RUN[@]}" user update "$LOGIN" --user_pass="$NEW_PASS" --quiet; then "${WP_RUN[@]}" user update "$LOGIN" --user_pass="$NEW_PASS" --skip-plugins --skip-themes
echo "Password for $TARGET changed to: $NEW_PASS" if [ $? -eq 0 ]; then
echo "Password for username '$TARGET' changed to: $NEW_PASS"
echo "Password for username '$TARGET' changed to: $NEW_PASS" >> /home/$USER/web/$DOMAIN/wp-admin-password-change.txt
chown $USER:$USER /home/$USER/web/$DOMAIN/wp-admin-password-change.txt
chmod 600 /home/$USER/web/$DOMAIN/wp-admin-password-change.txt
else else
cat /home/$USER/web/$DOMAIN/wp-cli-error.log
echo "Failed to change password for $TARGET." echo "Failed to change password for $TARGET."
fi fi
break break
@ -125,4 +147,14 @@ echo "Cache flushed and salts refreshed."
echo echo
echo "Done." echo "Done."
if [ -f /home/$USER/web/$DOMAIN/wp-admin-password-change.txt ]; then
echo "-------------------------------------"
echo "For website $DOMAIN - new wp-admin passwords have been set."
echo "-------------------------------------"
cat /home/$USER/web/$DOMAIN/wp-admin-password-change.txt
echo "-------------------------------------"
echo ""
read -r -p "== Press Enter to continue..."
fi
exit 0 exit 0