DirectAdmin API 开发者指南

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 接口端点

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 采用简单的类 REST HTTP 模型——而非 GraphQL 或复杂的 SDK——因此任何能够发送 HTTP 请求的编程语言均可使用:PHP、Python、Node.js、Go、Ruby,甚至是使用 cURL 的基础 Shell 脚本。

通过 Login Keys 创建 API 密钥:作用范围与过期设置

在编写第一行 API 代码之前,您应当先创建一个专用的 Login Key。在脚本中使用主账号密码存在重大安全风险:一旦脚本或其配置文件遭到泄露,整个托管账号将面临风险。Login Keys 让您能够精细控制每个脚本的操作权限,并可在必要时立即撤销。

如何创建 Login Key

  1. 登录 DirectAdmin,进入 高级功能 > Login Keys。
  2. 点击 创建 Login Key。
  3. 填写一个能标识该密钥用途的描述性名称,例如 billing-provisioner 或 dns-automation。
  4. 在 允许的命令 下,仅选择该密钥需要调用的 API 接口端点。例如,仅用于创建邮箱账号的密钥,只需授予 CMD_API_POP 的访问权限,无需更多。
  5. 设置 过期日期。永不过期的密钥存在长期安全隐患。设置过期日期可强制定期轮换。以一年为默认值是合理的选择。
  6. 如果您的脚本运行在具有静态 IP 的服务器上,可选择将密钥限制为特定的 IP 地址。即使密钥泄露,这也能提供网络层面的防护。
  7. 点击 保存并立即复制密钥——离开页面后 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 的权限。限制权限可在密钥泄露时将损害范围降至最低。可能造成不可逆损坏的操作——例如删除账号或清除数据库——应仅授予交互式使用的密钥,而非自动化脚本。

以与账号密码安全同等严格的标准对待 API 访问,可确保自动化能力不会给您的托管环境引入新的攻击面。

DirectAdmin 中的 API 文档页面
DirectAdmin 中的 API 文档页面

需要支持完整 API 访问的托管?

AsiaGB 托管支持完整的 DirectAdmin API——非常适合开发者和企业用户。

查看托管套餐