如何手动重置您的 WordPress 管理员密码
失去对 WordPress 管理员账户的访问权限并不意味着失去对网站的控制。如果标准的”忘记密码?”邮件流程失效——由于邮件设置配置错误、无法访问的电子邮件地址或损坏的用户记录——您可以通过直接在数据库、文件系统或 Shell 级别重置密码来完全绕过它。
本指南涵盖四种经过实战检验的方法:phpMyAdmin、通过 functions.php 使用 FTP、通过 SSH 使用 WP-CLI,以及 WordPress 紧急密码重置脚本。每种方法都附有详细步骤、安全注意事项以及适用场景说明。
标准重置流程失效的情况
在使用手动方法之前,请先了解内置重置功能失效的原因。最常见的原因包括:
- WordPress 邮件发送失败 —
wp_mail()依赖 PHP 的mail()函数或 SMTP 插件。如果两者均未配置,重置邮件将被静默丢弃。 - 无法访问注册邮箱 — 账户创建时使用了已失效的邮件地址。
wp_users表损坏 — 较为罕见,但可能在迁移失败或插件冲突后发生。- 完全无法访问 wp-admin — 暴力破解防护插件(Wordfence、Limit Login Attempts)可能会封锁重置端点本身。
找出根本原因非常重要,因为某些方法(WP-CLI、phpMyAdmin)可以在完全不涉及邮件系统的情况下修复密码,而其他方法(紧急脚本)则需要对网站进行 HTTP 访问。
方法一:通过 phpMyAdmin 重置密码
适用场景:无法使用 SSH 但可以访问 cPanel 或类似控制面板的共享主机环境。
phpMyAdmin 提供对存储所有 WordPress 用户凭据的 MySQL 或 MariaDB 数据库的直接读写访问。密码以 bcrypt 哈希(WordPress 6.x+)或 MD5 哈希(旧版安装)形式存储。phpMyAdmin 内置的函数选择器会自动处理哈希操作。
第一步:从控制面板打开 phpMyAdmin
登录您的主机控制面板——cPanel、DirectAdmin 或自定义面板。找到数据库部分并点击 phpMyAdmin。如果您使用的是带有 cPanel 的 VPS,路径通常为 cPanel > 数据库 > phpMyAdmin。
第二步:选择 WordPress 数据库
在左侧边栏中,点击与您的 WordPress 安装关联的数据库名称。如果不确定哪个数据库是正确的,请打开网站根目录中的 wp-config.php,查找 DB_NAME 常量。
第三步:打开 wp_users 表
展开数据库表并点击 wp_users。如果您的安装使用了自定义表前缀(由 wp-config.php 中的 $table_prefix 定义),则该表将命名为 <prefix>_users——例如 site7_users。
第四步:编辑管理员用户行
- 找到
user_login与您的管理员用户名匹配的行。对于大多数默认安装,这是ID = 1所在的行。 - 点击编辑(铅笔图标)。
- 找到
user_pass字段。 - 在
user_pass旁边的函数下拉菜单中,选择 MD5。 - 在值字段中,以明文形式输入您的新密码。
- 向下滚动并点击执行。
重要技术说明:在此处选择 MD5 足以立即登录,因为 WordPress 在登录时会执行旧版 MD5 检查,然后在成功验证后自动使用更强的 phpass 或 bcrypt 算法重新对密码进行哈希处理。您无需手动生成 bcrypt 哈希。
第五步:验证更改
导航到您的 WordPress 登录页面,使用新密码登录。如果登录成功,WordPress 将静默地将数据库中的哈希升级为当前算法。
方法二:通过 FTP 修改 functions.php 重置密码
适用场景:phpMyAdmin 不可用但可以访问 FTP/SFTP 凭据的情况。
此方法通过临时向活动主题的 functions.php 文件添加代码,将密码重置调用直接注入 WordPress 的执行周期。
第一步:通过 FTP 连接
使用 FileZilla 或 Cyberduck 等 FTP 客户端。输入您的 FTP 主机、用户名、密码和端口(普通 FTP 使用 21,SFTP 使用 22——在可用时始终优先选择 SFTP)。导航至:
/public_html/wp-content/themes/<your-active-theme>/要在不登录 wp-admin 的情况下确认哪个主题处于活动状态,请在 phpMyAdmin 中查看 wp_options 表的 template 选项键。
第二步:下载并编辑 functions.php
将 functions.php 下载到本地计算机。在代码编辑器(VS Code、Sublime Text 或任何能保留不带 BOM 的 UTF-8 编码的编辑器)中打开它。在文件最底部添加以下代码行:
<?php
// Temporary password reset — REMOVE IMMEDIATELY AFTER USE
add_action( 'init', function() {
wp_set_password( 'YourNewSecurePassword123!', 1 );
});将 'YourNewSecurePassword123!' 替换为您选择的密码。第二个参数(1)是用户 ID。如果您的管理员账户 ID 不是 1,请先查询 wp_users 表以确认正确的 ID。
将调用包装在 add_action( 'init', ... ) 中比直接在文件顶层调用 wp_set_password() 更安全,因为这样可以确保在执行之前 WordPress 核心函数已完全加载。
第三步:上传并登录
保存文件并将其上传回服务器,覆盖原始文件。加载 WordPress 网站的任意页面(即使是首页)以触发 init 钩子并执行密码更改。然后导航至 /wp-login.php 并使用新密码登录。
第四步:立即删除代码
此步骤不可省略。将重置代码留在 functions.php 中意味着每次页面加载都会将密码重置为硬编码的值,从而造成严重的安全漏洞。再次下载 functions.php,删除您添加的代码行,然后重新上传。
方法三:通过 WP-CLI(SSH 命令行)重置密码
适用场景:拥有 VPS 或独立服务器 SSH 访问权限的开发人员和系统管理员。这是最快速、最简洁的方法。
WP-CLI 是 WordPress 的官方命令行界面。它可以在不使用浏览器的情况下管理用户、插件、主题和数据库操作。如果您在 VPS 主机方案或独立服务器上运行 WordPress,WP-CLI 几乎肯定已经可用,或者可以轻松安装。
第一步:验证 WP-CLI 是否已安装
wp --info如果未找到该命令,请安装它:
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp第二步:导航至 WordPress 根目录
cd /var/www/html调整路径以匹配您实际的文档根目录。您可以通过检查 wp-config.php 来验证是否位于正确的目录:
ls wp-config.php第三步:重置密码
wp user update 1 --user_pass="YourNewSecurePassword123!" --allow-root如果您以 root 用户身份运行命令,则需要 --allow-root 标志。如有需要,请将 1 替换为实际的用户 ID。要先查找正确的 ID:
wp user list --fields=ID,user_login,user_email --allow-root第四步:确认更新
WP-CLI 完成后将输出 Success: Updated user 1.。您可以立即验证更改:
wp user get 1 --field=user_pass --allow-root这将返回新的 bcrypt 哈希,确认记录已更新。登录 wp-admin 以完成该过程。
边缘情况——多站点安装:在 WordPress 多站点中,在命令前加上 --url=yoursite.com 以定位正确的子站点:
wp user update 1 --user_pass="YourNewSecurePassword123!" --url=yoursite.com --allow-root方法四:通过 WordPress 紧急脚本重置密码
适用场景:您有 FTP 访问权限但没有 SSH、没有 phpMyAdmin,且 functions.php 方法不实用的情况(例如,活动主题是没有 functions.php 的块主题)。
WordPress Codex 提供了一个独立的 PHP 紧急重置脚本(emergency.php),它独立于 WordPress 安装运行。它会提示输入新密码,正确地对其进行哈希处理,并使用 wp-config.php 中的凭据将其直接写入数据库。
第一步:获取脚本
从官方 WordPress GitHub 仓库或 Codex 下载脚本。官方来源为:
https://codex.wordpress.org/Resetting_Your_Password#Through_the_emergency_password_reset_script将文件保存为 emergency.php。
第二步:上传至 WordPress 根目录
使用您的 FTP 客户端,将 emergency.php 上传到包含 wp-config.php 的同一目录——通常是 /public_html/ 或 /var/www/html/。
第三步:在浏览器中执行脚本
打开浏览器并导航至:
https://yourdomain.com/emergency.php脚本将自动读取 wp-config.php 以获取数据库凭据,然后显示一个表单供您输入并确认新密码。提交表单以应用更改。
第四步:立即删除脚本
这一步至关重要。该脚本没有任何身份验证层——任何知道该 URL 的人都可以使用它来接管您的网站。在重新获得访问权限后立即删除它:
rm /var/www/html/emergency.php或通过 FTP 删除。通过再次尝试加载该 URL 来验证删除——它必须返回 404。
方法对比
| 方法 | 需要 SSH | 需要 FTP | 需要数据库访问 | 修改主题文件 | 速度 | 保持活动状态的安全风险 |
|---|---|---|---|---|---|---|
| — | — | — | — | — | — | — |
| phpMyAdmin | 否 | 否 | 是(通过面板) | 否 | 快速 | 无 |
| 通过 FTP 使用 `functions.php` | 否 | 是 | 否 | 是 | 中等 | 严重 |
| 通过 SSH 使用 WP-CLI | 是 | 否 | 否 | 否 | 最快 | 无 |
| 紧急脚本 | 否 | 是 | 否 | 否 | 中等 | 严重 |
密码重置后的安全加固
重新获得访问权限只是第一步。强制手动重置通常意味着存在更深层的问题——账户被入侵、服务器配置错误或邮件系统故障。请立即解决以下问题:
- 审计近期登录记录。检查
wp_usermeta中的session_tokens以查看活动会话。使用wp user session destroy --all --allow-root销毁所有会话。 - 轮换密钥。在
https://api.wordpress.org/secret-key/1.1/salt/生成新值,并替换wp-config.php中对应的常量。这将使所有现有 Cookie 失效。 - 修复 WordPress 邮件发送。安装 SMTP 插件(WP Mail SMTP、Postman SMTP)并将其连接到事务邮件服务(SendGrid、Mailgun、Amazon SES),以确保标准重置流程在未来正常运作。
- 启用双因素身份验证。WP 2FA 或 Google Authenticator 等插件添加了第二层验证,大大降低了暴力破解锁定的可能性。
- 检查文件权限。
wp-config.php应为640或600。functions.php文件应为644。全局可写文件(777)是立即需要关注的危险信号。 - 检查未授权的管理员账户。运行
wp user list --role=administrator --allow-root并删除任何您不认识的账户。
对于托管在独立服务器上的生产环境,还应检查 /var/log/auth.log(或基于 RHEL 系统上的 /var/log/secure),查找可能在锁定之前发生的 SSH 暴力破解尝试。
如果您的网站处理敏感用户数据或电子商务交易,请将强化后的登录与正确颁发的 SSL 证书配合使用,以确保凭据不会以明文形式传输。
决策矩阵:您应该使用哪种方法?
使用此清单为您的情况选择正确的方法:
- 您有 cPanel 或 DirectAdmin 访问权限——使用 phpMyAdmin(方法一)。这是最安全的方法,不需要修改任何文件。
- 您有 FTP/SFTP 但没有数据库面板——使用
functions.php(方法二),但请设置日历提醒,在登录后五分钟内删除代码。 - 您有 VPS 或独立服务器的 SSH 访问权限——使用 WP-CLI(方法三)。这是最简洁的方法,不留任何残余代码,并支持自动化脚本。
- 您有 FTP 但活动主题没有
functions.php(块主题、FSE 主题)——使用紧急脚本(方法四),并在关闭浏览器标签页之前将其删除。 - 以上方法均不可用——联系您的主机提供商支持团队。他们可以在基础设施层面重置数据库密码。
常见问题
问:通过 phpMyAdmin 重置密码会注销活动会话吗?
不会。在数据库中更改 user_pass 不会使现有的 WordPress 身份验证 Cookie 失效。要强制结束所有会话,您还必须更新 wp-config.php 中的密钥,或使用 wp user session destroy --all。
问:我的 wp_users 表为空或缺失。发生了什么?
这通常表示数据库迁移失败、导入损坏或 wp-config.php 中的 $table_prefix 配置错误。请验证前缀是否与 phpMyAdmin 中的实际表名匹配。如果表确实缺失,请从数据库备份中恢复。
问:尽管 WordPress 现在使用 bcrypt,我仍然可以在 phpMyAdmin 中使用 MD5 吗?
可以。WordPress 的身份验证层在登录时会检测 MD5 哈希密码并接受它们以保持向后兼容性,然后立即使用当前算法(phpass/bcrypt)重新对密码进行哈希处理。MD5 哈希仅临时存储,直到下次成功登录为止。
问:wp user update WP-CLI 命令返回权限错误。如何解决?
这通常意味着 WP-CLI 以与 WordPress 文件所有者不同的系统用户身份运行。请使用 sudo -u www-data wp user update ... 切换到正确的用户,或者如果您以 root 身份操作,请添加 --allow-root 标志。
问:将紧急脚本在服务器上保留几个小时是否安全?
不安全。紧急脚本没有任何身份验证。任何发现或猜到该 URL 的访客都可以使用它来重置您的管理员密码并完全控制您的网站。使用后立即删除它——请以与暴露的私钥同等的紧迫性对待它。
