
DirectAdmin 不仅是一个可以点击操作的控制面板——它还提供了一套 API,让开发者能够通过 HTTP 请求以编程方式执行各种命令,从创建域名、邮箱到管理 DNS,无所不包。它非常适合自动化工作流程,以及将 DirectAdmin 与您自己的系统进行集成。本指南涵盖您在开始编写 API 调用代码之前所需掌握的基础知识。
DirectAdmin API 能做什么
DirectAdmin API 将面板中几乎所有功能都以可编程命令的形式开放出来。其真正的价值在于自动化重复性工作——例如:一次性为所有新员工批量创建邮箱的脚本、自动为客户开通子域名的系统,或者通过单条命令完成整站配置的开通工具。原本在面板中需要数十次点击才能完成的任务,现在一个脚本就能搞定。
身份验证:Login Key 比密码更安全
DirectAdmin API 支持 Basic Authentication,基本格式如下:
https://username:[email protected]:2222/CMD_API_ENDPOINT
但将账号的主密码硬编码在脚本中存在风险——一旦代码泄露,主密码也会随之泄露。更安全的方式是通过高级功能 → Login Keys 创建一个 Login Key,您可以在其中定义该密钥允许调用的命令,并可随时将其撤销,而无需更改主密码。调用 API 时,使用 Login Key 代替密码即可。
常用 API 接口端点
CMD_API_SHOW_DOMAINS— 列出账号下的所有域名CMD_API_DOMAIN— 创建或删除域名CMD_API_POP— 管理邮箱账号CMD_API_DATABASES— 管理 MySQL 数据库CMD_API_SUBDOMAINS— 管理子域名CMD_API_DNS_CONTROL— 管理 DNS 记录
cURL 示例:列出域名
以下是一条基础 cURL 命令,用于获取所有域名——返回结果为 URL 编码的查询字符串,您可进一步解析:
curl -u "username:password" "https://yourdomain.com:2222/CMD_API_SHOW_DOMAINS"
PHP 示例:创建邮箱账号
在 PHP 中使用 cURL 发送 POST 请求来创建邮箱:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://yourdomain.com:2222/CMD_API_POP');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'action=create&domain=yourdomain.com&user=newuser&passwd=secret123"a=500');
curl_setopt($ch, CURLOPT_USERPWD, 'da_user:da_login_key');
$result = curl_exec($ch);
请务必检查 API 响应中的 error=1 字段以捕获执行失败的命令,而不是默认假设每次调用都会成功。
安全注意事项
API 通过 HTTPS 运行在端口 2222 上——切勿使用 HTTP 明文调用,否则您的凭据将以未加密方式传输。不要将 Login Key 嵌入用户可见的客户端代码或 JavaScript 中;请将其保存在外部无法访问的服务端配置文件中,并将每个 Login Key 的权限限制在其实际所需的命令范围内。
API 文档:完整的接口端点列表、必填参数及响应格式,请参阅 docs.directadmin.com/api 上的官方文档。请确保参阅与您服务器所运行的 DirectAdmin 版本对应的文档。
常见问题解答
使用 API 必须是开发者吗?
是的——API 面向能够编写脚本的人员。对于一般的网站管理需求,DirectAdmin 控制面板已经足够。
Login Key 与密码有何不同?
Login Key 是一个作用范围受限的专用密钥,可随时撤销而不影响主密码,因此在脚本中使用更为安全。
API 使用哪个端口?
通过 HTTPS 使用端口 2222——与 DirectAdmin 控制面板相同。
DirectAdmin API 实际应用场景
DirectAdmin API 将控制面板中几乎所有功能都以可通过 HTTP 调用的命令形式开放出来。这意味着您在面板中执行的任何重复性操作都可以被脚本化、定时执行并自动化。以下是最常见的实际应用场景:
- 自动化托管配置/开通 — 当客户在您的计费系统中完成购买后,脚本自动调用 API 创建托管账号、设置域名并配置邮箱——无需人工干预。
- 大规模经销商管理 — 拥有数十或数百个客户账号的经销商可使用 API 脚本从统一的管理后台管理所有账号,无需逐一登录。
- 批量创建邮箱账号 — 需要为新团队或新部门开通邮箱?调用
CMD_API_POP的脚本可在数秒内创建所有邮箱,离职时的批量删除同样适用。 - DNS 自动化 — 内部 DevOps 工具通过 API 在部署流水线中以编程方式添加或更新 DNS 记录,确保 DNS 变更与代码部署同步进行。
- 定时备份 — 每夜的 CRON 任务调用 API 为每个客户账号触发备份,并将备份传输至远程存储,无需人工介入。
- 监控与报告 — 脚本定期查询所有账号的磁盘用量和带宽数据,生成使用报告,或在账号接近限额时触发告警。
API 采用简单的类 REST HTTP 模型——而非 GraphQL 或复杂的 SDK——因此任何能够发送 HTTP 请求的编程语言均可使用:PHP、Python、Node.js、Go、Ruby,甚至是使用 cURL 的基础 Shell 脚本。
通过 Login Keys 创建 API 密钥:作用范围与过期设置
在编写第一行 API 代码之前,您应当先创建一个专用的 Login Key。在脚本中使用主账号密码存在重大安全风险:一旦脚本或其配置文件遭到泄露,整个托管账号将面临风险。Login Keys 让您能够精细控制每个脚本的操作权限,并可在必要时立即撤销。
如何创建 Login Key
- 登录 DirectAdmin,进入 高级功能 > Login Keys。
- 点击 创建 Login Key。
- 填写一个能标识该密钥用途的描述性名称,例如
billing-provisioner或dns-automation。 - 在 允许的命令 下,仅选择该密钥需要调用的 API 接口端点。例如,仅用于创建邮箱账号的密钥,只需授予
CMD_API_POP的访问权限,无需更多。 - 设置 过期日期。永不过期的密钥存在长期安全隐患。设置过期日期可强制定期轮换。以一年为默认值是合理的选择。
- 如果您的脚本运行在具有静态 IP 的服务器上,可选择将密钥限制为特定的 IP 地址。即使密钥泄露,这也能提供网络层面的防护。
- 点击 保存并立即复制密钥——离开页面后 DirectAdmin 将不再显示该密钥。
创建完成后,在 Basic Authentication 中用 Login Key 代替密码。API 调用 URL 格式变为:https://username:[email protected]:2222/CMD_API_ENDPOINT。该密钥仅授予您所允许的接口端点的访问权限,仅此而已。
更多 cURL 示例:查询配额、列出域名、添加 DNS
除了基础的域名列表和邮箱创建示例外,以下是开发者常用于自动化的其他 cURL 命令:
列出某域名下的所有邮箱账号
curl -u "username:login_key" "https://yourdomain.com:2222/CMD_API_POP?action=list&domain=yourdomain.com"
列出账号下的所有域名
curl -u "username:login_key" "https://yourdomain.com:2222/CMD_API_SHOW_DOMAINS"
查询所有用户的磁盘用量(经销商级别)
curl -u "reseller_user:login_key" "https://yourdomain.com:2222/CMD_API_SHOW_USERS"
添加 DNS A 记录
curl -u "username:login_key" -X POST "https://yourdomain.com:2222/CMD_API_DNS_CONTROL" \
-d "action=add&domain=yourdomain.com&type=A&name=subdomain&value=1.2.3.4&ttl=300"
删除邮箱账号
curl -u "username:login_key" -X POST "https://yourdomain.com:2222/CMD_API_POP" \
-d "action=delete&domain=yourdomain.com&user=olduser"
API 响应以 URL 编码的键值字符串形式返回。调用成功时返回类似 error=0&text=Done 的内容;调用失败时返回 error=1&text=错误描述。请务必在代码中解析 error 字段,而非默认假设调用成功。
安全最佳实践:IP 白名单、密钥轮换与最小权限原则
使用 HTTPS 是必要条件,但对于 API 安全而言还不够。生产环境需要额外的安全措施,以将密钥泄露或不安全部署所带来的影响降至最低。
按 IP 地址限制 Login Key
创建 Login Key 时,DirectAdmin 允许您指定哪些 IP 地址可以使用该密钥。如果您的 API 脚本运行在具有固定 IP 的服务器上,请务必设置此限制。即使密钥泄露,攻击者若不在白名单 IP 范围内调用,该密钥也将毫无用处。即使是在开发阶段本地运行的脚本,限制为办公室 IP 也能提供有意义的保护。
定期轮换密钥
像对待密码一样对待 API 密钥:定期轮换,并在有权访问密钥的团队成员离职时立即更换。操作流程很简单——创建新密钥,更新所有使用该密钥的脚本配置,验证一切正常运行,然后撤销旧密钥。设置较短的过期时间(三至六个月)可自动强制执行这一规范。
应用最小权限原则
每个 Login Key 应仅具备其特定用途所需的最小权限。一个只负责创建邮箱账号的配置脚本,不需要具备删除域名或修改 DNS 的权限。限制权限可在密钥泄露时将损害范围降至最低。可能造成不可逆损坏的操作——例如删除账号或清除数据库——应仅授予交互式使用的密钥,而非自动化脚本。
- 切勿将 Login Key 提交到版本控制系统 — 即使是私有仓库也不行。请使用环境变量或加密的密钥管理工具代替。
- 将密钥存储在 Web 根目录之外 — 包含 API 密钥的配置文件绝不应放置在 Web 服务器对外提供服务的目录中。
- 监控 API 访问日志 — DirectAdmin 会记录 API 请求。定期检查日志,留意来自异常 IP 或访问脚本不应调用端点的请求。
- 各环境使用独立密钥 — 开发环境、预发布环境和生产环境应分别使用具有不同权限的 Login Key。这样可防止开发环境密钥泄露后影响生产环境。
以与账号密码安全同等严格的标准对待 API 访问,可确保自动化能力不会给您的托管环境引入新的攻击面。