Migration Guide: Move Accounts to Sahaab
This guide shows you how to move hosting accounts from another control panel to Sahaab. You can move them in two ways:
| Way | Use it when | Sources |
|---|---|---|
| Transfer Tool | You can reach the old server over SSH as root | cPanel/WHM, DirectAdmin, Plesk |
| Import a Backup (Migration Center) | You only have backup archives | cPanel (cpmove-USER.tar.gz), DirectAdmin (user.RESELLER.USER.tar.gz / .tar.zst). Plesk archives: coming soon |
Both are in the admin panel under Move to this server. Only the administrator can use them.
Nothing changes on the old server. The websites keep running there until you switch DNS. So you can move accounts, check them, and switch when you are ready.
What gets copied
- Websites, subdomains, addon domains and aliases
- Email accounts with their mail and passwords, and forwarders
- MySQL databases and users (passwords kept)
- DNS zones (pointed to this server)
- Cron jobs
- From cPanel: FTP accounts with their passwords, and each domain's DKIM key (so mail stays signed with the key already in DNS)
Passwords are kept where the format allows: the account, the mailboxes and the database users sign in with their current passwords. Anything that could not be carried over gets a new password, listed on the account's migration page (see After the move).
Safety rules during a move:
- Accounts suspended on the old server stay suspended here.
- Cron jobs that look like malware (miners, scripts downloaded and run at once, programs run from temporary folders) are not imported. They are listed in the warnings instead.
- An account larger than its package is still imported. The quota is lifted during the import and put back afterwards, with a warning to choose a bigger package.
- Downloaded archives are deleted once the account is imported.
Before you start
- Install Sahaab on a fresh server. See Install Sahaab. You can prepare a transfer during installation: answer "yes" to "Move accounts from another server" or use
--migrate-from=HOST. - Activate your license. During the trial period transfers work. After the trial ends, new transfers are paused until you activate the full version.
- Create packages that match your old plans. The Transfer Tool can match packages by plan name.
- Choose OpenLiteSpeed as the web server (the default) if your sites use
.htaccessfiles. With Nginx,.htaccessfiles are ignored. - A day before you switch DNS, lower the DNS TTL on the old server (for example to 300 seconds). Then the switch spreads quickly.
Move accounts with the Transfer Tool
Step 1: Connect to the old server
- Go to Move to this server → Transfer Tool.
- Under Connect to a server, enter the Server IP or hostname and the SSH port.
- Choose the Authentication:
- Root password: stored encrypted and only used for the transfer. Delete it from the server page when you are done.
- SSH key (recommended): click Generate SSH key. Copy the line shown and add it to
/root/.ssh/authorized_keyson the old server. - Click Connect.
Sahaab connects, detects the control panel (cPanel/WHM, DirectAdmin or Plesk) and lists its accounts. The page refreshes automatically.
Step 2: Choose the accounts
The server page lists every account with its domain, plan, disk use and whether it is suspended.
- Tick the accounts to move, or Select all.
- An account whose username or domain already exists here is marked "Same username or domain exists here — it will wait for review".
Step 3: Choose the options
- Package for transferred accounts: Match the source plan name (fallback: default), or one package for all.
- Import automatically when there are no conflicts: leave it ticked to import at once. Untick it to review each account first.
- Point DNS A records to this server: the copied DNS zones point to this server's IP.
- What to transfer: website files, email accounts and mail, MySQL databases, DNS zones and cron jobs. Untick what you do not need.
Click Transfer selected accounts.
Step 4: Follow the progress
The Transfers table shows each account: done, in progress, needs review or failed.
- needs review: open the account with Review. Change the username if it is taken. Databases are renamed to the new prefix and configuration files (
wp-config.php,.env…) are updated. Check the contact email, package and what to import, then click Start import. - failed: open Details to read the error. Fix the cause and click Retry. A retry reuses the archive already downloaded.
Click Rescan to list the old server's accounts again (for example after new accounts were made there).
Step 5: Final sync
Between the first copy and the DNS switch, customers may still change things on the old server. The final sync copies only what changed:
- Website files: new and changed files
- New email
- Databases (fresh copy, replaces tables)
For one account, open it and click Run final sync. For every completed account at once, click Sync completed accounts on the server page.
Run the final sync just before you switch DNS. Databases on this server are replaced by a fresh copy from the old server, so changes made on the new server in the meantime are lost.
Step 6: Clean up
When all accounts are moved, open the server page and click Delete password to remove the stored root password. If you used an SSH key, remove its line from /root/.ssh/authorized_keys on the old server.
Import a backup archive
Use this when you cannot connect to the old server, or when a customer sends you a backup.
Step 1: Get a backup
The format is detected automatically.
| Source | How to make the backup |
|---|---|
| cPanel (root) | /scripts/pkgacct USERNAME → /home/cpmove-USERNAME.tar.gz |
| cPanel (user) | Files → Backup → Download a Full Account Backup |
| DirectAdmin (admin/reseller) | Admin Backup/Transfer → select users → /home/admin/admin_backups/user.*.tar.gz |
| DirectAdmin (user) | Create/Restore Backups → select all → download from backups/ |
Step 2: Upload it
- Go to Move to this server → Import a Backup.
- Under Upload a backup, choose the file and click Upload & analyze.
The page shows the upload limit. For larger archives, copy them to /backup/import on the server (with scp or rsync). They then appear under Archives on this server. Click Analyze.
Step 3: Review and import
Sahaab extracts the archive and shows what is inside: domains, DNS zones, mailboxes, forwarders, databases, database users and cron jobs. Resolve any problems listed under "Resolve before importing".
- Under Account on this server, check the Username. Change it if it is taken.
- Check the Contact email and choose the Package. The old plan name is shown.
- Under What to import, tick what you need.
- Click Start import.
The Migrations table on the Import a Backup page shows each import and its status. Click Retry if one fails, or Remove to delete a migration and its archive (an imported account is kept).
The final sync is available only for accounts moved with the Transfer Tool. For an uploaded archive, upload a newer backup instead.
Switch DNS to the new server
After the move, the websites and email still run on the old server until the domains point here. Each account's migration page has a Point the domain here section.
Option A: Change the nameservers (recommended)
At each domain's registrar, change the nameservers to the ones shown on the page (your server's or the reseller's nameservers). Then DNS, websites and email all move together.
Option B: Keep DNS at the registrar
If the customer keeps DNS somewhere else:
- Point the A records of the domain,
wwwandmailto the new server's IP. - Copy the email records (SPF, DKIM and DMARC) from the customer's Email Accounts page into that DNS.
Check the switch
The Point the domain here table shows, for each domain, its nameservers and A record now:
- Uses our nameservers
- Points here (A record)
- Still on the old server
When every domain points here, the page says "All domains of this account point to this server." The account page in the admin panel shows the same check.
Recommended order
- A day before: lower the DNS TTL on the old server (for example 300 seconds).
- Run the final sync.
- Verify the websites (see below).
- Switch DNS.
Verify websites
On the account's migration page, click Verify websites (Compare old and new server). Sahaab loads every website from the old server and from this server and compares the answers. The table shows the result for each website.
Use it before you switch DNS, so you can fix problems while visitors still use the old server.
After the move: what to check
Open each account's migration page and look at:
- New passwords: passwords that could not be carried over. Send them to the customer.
- Warnings: for example skipped cron jobs, or an account larger than its package. Read each one.
- Import report: how many mailboxes were copied and which configuration files were updated.
Then check these points:
- Websites load on the new server (use Verify websites before the switch, then open the sites after it).
- SSL certificates are issued once the domains point here. Check the SSL/TLS page of the account, or Server Settings → Certificates.
- Email works: send and receive a test message. Check the SPF, DKIM and DMARC records on the customer's Email Accounts page.
- Email routing: if a domain's email stays with another service, its routing should be Remote mail server (or Automatic).
- PHP version: pick the version the site needs on the customer's PHP page or in the package.
- WordPress sites are found automatically every day. To see them at once, click Scan all accounts now on WordPress Sites.
- Packages: if a warning says an account is larger than its package, choose a bigger package.
- Resellers: to give an account to a reseller, use Owner → Change owner on the account page.
- Old server: keep it running for a few days until DNS has spread everywhere. Then cancel it.
Common problems
- "403 Forbidden" on a site after the move. Folders that the web server cannot pass (for example a Laravel site's
public/folder) are opened automatically after a transfer. If you still see it, check the folder permissions in the File Manager. - A site cannot connect to its database. Check the database name, user and password in the site's configuration file. If you renamed the account, the database prefix changed; the configuration files Sahaab updated are listed in the import report.
- Mail from the website does not reach the customer's other mail service. Set the domain's Email routing to Remote mail server.
- The transfer waits and does not start. The page says how long the task has been waiting. The background agent may not be running. On the server, run
systemctl restart whmd.