如何批量创建 cPanel 帐户

在生产服务器的控制面板方面,cPanel 是最有力的竞争者之一。 该软件不是强制性的,但在与服务器交互、提供图形界面、简化复杂任务和自动化流程时会产生巨大的影响。 它的核心功能之一是创建一个用户将被限制的托管帐户,让主用户可以选择限制其资源消耗和系统权限,以及其他功能。

创建一个 cPanel 帐户

创建一个新的 cPanel 帐户是一个相对简单的过程。 首先,在 WHM(Web 主机管理器)主屏幕上,导航到 账户功能 菜单并单击 创建一个新账户. 此操作将执行帐户创建脚本,要求您输入您的域信息。 然后,完成后,单击 创造.

当我们试图一次创建几十个帐户时,这个过程很快就会变得很麻烦。 本文将介绍如何在几分钟内自动创建批量帐户。

使用 Bash 脚本创建大量模板帐户

我们将使用一个简单的 bash 脚本来创建我们的模板帐户。

要求

  • SSH 访问和 root 权限。
  • Linux文件系统的基本知识。
  • FTP 访问,或有与文本编辑器(Vim、Nano 等)交互的经验。
  • WHM 11+。

脚本创建

在开始之前,我们必须设置脚本。 为此,我们需要通过复制和粘贴整个代码块来运行以下命令。

touch cpanel_mass_account.sh
chmod +x cpanel_mass_account.sh
tee -a cpanel_mass_account.sh << END
#! /bin/sh

#This script can be used to mass create templated cPanel accounts
#Requires a list of domains/accounts with one account per line
clear
echo -e "Please provide the path of the file containing the list of accounts, each listed with the following format:nndomain.com username password nnNote: Only the domain name is mandatory, default values will be configured if no other information is specified.n"
read path

#Loop to make sure file exists
while true; do
        if  [[ -f "$path" ]] ; then
            break
        else
            echo -e "File does not exists, please try again.n"
            read path
        fi
done
echo -e "n"

#To empty the log, if the file exists
if [[ -f "/root/execution_results.log" ]]; then
echo -n "" > /root/execution_results.log
fi

#Loop to create an account for each element in the list
count=1
sed -i  "/^ *$/d" $path #Remove empty lines from the file
lines=$(cat $path|wc -l)
while [[ $count -le $lines ]]
do
        data=$(cat $path|awk "NR==$count")
        data_array=($data)
        domain=$(echo ${data_array[0]})
        username=$(echo ${data_array[1]})
        password=$(echo ${data_array[2]})

        if [[ -z "$username" ]]; then
                u1=$(echo "$domain" |cut -c1-4|cut -d '.' -f1)
                username=$(echo "$u1$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 3 | head -n 1)") #To avoid errors with similar domains, using urandom to attach 3 random characters to the username
                echo -e "nNo username, generating one: $username"
        fi

        (echo -e "- Domain: $domainn"; whmapi1 createacct domain=$domain username=$username password=$password  --output=xml 2> /dev/null; echo -e "n") >> /root/execution_results.log
        results=$(grep "result" /root/execution_results.log|tail -n1)
        reason=$(grep "reason" /root/execution_results.log |tail -n1)
        reason=$(echo $reason|cut -d '>' -f2|cut -d '<' -f1)
        if [[ "$results" == *"1"* ]]; then
                echo "- Account $username for domain $domain, has been created successfully."
        else
                echo -e "Failed, there was an error during the account creation for domain $domain. Reason $reason"
        fi
(( count++ ))
done

echo -e "nA log of this operation was saved at /root/execution_results.log"
END

输出将是一个名为 cpanel_mass_account.sh 的具有执行权限的 .sh 文件。

如何使用它

我们需要为脚本工作创建一个列表。 我们可以使用我们服务器上可用的任何文本编辑器来生成文件或通过 FTP 上传文件。 该文件需要为纯文本格式。

输入每条信息时,请遵循 domain.com 用户名密码模式。

只有域名是绝对必要的。 如果您不提供域的用户名和密码,系统将自动生成信息。 我们的 example 文件名为 list.txt。

superdomain.com user1 L3U?HFmryNW%U 
anotheronebitesthe.dust anotheruser &8T{x>J
another_one.org

获得列表后,执行脚本。

[root ]# ./cpanel_mass_account.sh

执行后,应该会出现如下所示的消息,要求提供域列表以创建帐户。

输入文件 list.txt 所在的文件路径,然后按 Enter.

Please provide the path of the file containing the list of accounts, each listed with the following format:

domain.com username password
...

/home/temp/list.txt

将生成一个日志文件。 下面是典型的输出。

- Account user1 for domain superdomain.com, has been created successfully.
- Account anotheruser for domain anotheronebitesthe.dust, has been created successfully.
- Account randomuser for domain another_one.org, has been created successfully.
A log of this operation was saved at /root/execution_results.log

这 bash 脚本和 Web 浏览器的界面产生相同的输出格式,并且应该可以在任何带有 WHM 11+ 的 cPanel 服务器上工作。

分解脚本

让我们看一下脚本本身。

...
echo -e "Please provide the path of the file containing the list of accounts, each listed with the following format:nndomain.com username password..."
read path
...

#Loop to create an account for each element in the list
count=1
...
while [[ $count -le $lines ]]
do
...
        (echo -e "- Domain: $domainn"; whmapi1 createacct domain=$domain username=$username password=$password  --output=xml 2> /dev/null; echo -e "n") >> /root/execution_results.log
...
(( count++ ))
done

脚本中有两个主要部分。 第一个是请求包含要创建的帐户的列表文件时。

...
echo -e "Please provide the path of the file containing the list of accounts, each listed with the following format:nndomain.com username password..."
read path
...

第二个是一个简单的 while 循环,它将从列表中获取信息,将其保存在一个数组中,并将其用作 WHM API (whmapi1) 的输入以创建帐户。 API 将管理错误日志,脚本会将结果转发到日志文件。

#Loop to create an account for each element in the list
count=1
...
while [[ $count -le $lines ]]
do
...
        (echo -e "- Domain: $domainn"; whmapi1 createacct domain=$domain username=$username password=$password  --output=xml 2> /dev/null; echo -e "n") >> /root/execution_results.log
...
(( count++ ))
done

结论

您现在应该能够从列表文件中批量创建 cPanel 帐户,完成一项耗时的任务并使其更易于管理。 如果您对您的 cPanel 帐户有疑问或需要帮助选择适合您需求的托管计划,我们的支持团队每周 7 天、一年 365 天每天 24 小时在这里为您提供帮助。