---
layout: post
status: publish
published: true
title: Automated CPanel Backups with SCP

wordpress_id: 531
wordpress_url: http://www.martineve.com/?p=531
date: !binary |-
  MjAxMS0wMS0wOCAwODo0MTozMiArMDEwMA==
date_gmt: !binary |-
  MjAxMS0wMS0wOCAwODo0MTozMiArMDEwMA==
categories:
- Technology
- PHP
tags:
- Backup
comments:
- id: 6115
  author: Vanessa
  author_email: admin@v-nessa.net
  author_url: http://v-nessa.net
  date: !binary |-
    MjAxMS0wMS0xNCAxNTowMDowOCArMDEwMA==
  date_gmt: !binary |-
    MjAxMS0wMS0xNCAxNTowMDowOCArMDEwMA==
  content: Very nice! I don't think I've updated my original script since 2006!
- id: 6509
  author: Jon
  author_email: ferrari_41@hotmail.com
  author_url: ''
  date: !binary |-
    MjAxMS0wNy0yNSAxNDoyMDowMCArMDIwMA==
  date_gmt: !binary |-
    MjAxMS0wNy0yNSAxNDoyMDowMCArMDIwMA==
  content: ! 'Hi

    Thank you for the script. I tried to run it by it came up with error message:
    please check the host hostname.com and username and password)

    I can confirm that host, user name and password were all correct. I could run
    it from the control panel.

    Are you able to help?

    Regards

    Jon'
- id: 6510
  author: Martin Paul Eve
  author_email: martin@martineve.com
  author_url: https://www.martineve.com
  date: !binary |-
    MjAxMS0wNy0yNSAxNDoyODowMCArMDIwMA==
  date_gmt: !binary |-
    MjAxMS0wNy0yNSAxNDoyODowMCArMDIwMA==
  content: ! 'So, just to confirm, you have changed the username, password and host
    in the script? What version of CPanel are you using? The $skin variable must be
    set to correctly refer to this. '
---
<p>Originally from <a href="http://www.v-nessa.net/2007/01/03/cpanel-automated-backup-script">V-Nessa's site</a>, I thought I would share the PHP script that I have now modified to include Secure Copy (SCP) support.</p>

{% highlight php %}
<?php



// PHP script to allow periodic cPanel backups automatically.

// Permissions on this file should be 600 

// Place outside your public_html 

// Crontab:  30 3 * * * /usr/local/bin/php /home/username/cpanel_backup.php



// ********* Configuration *********



// Info required for cPanel access

$cpuser = "username"; // Username used to login to CPanel

$cppass = "password"; // Password used to login to CPanel

$domain = "domain.com"; // Domain name where CPanel is run

$skin = "x3"; // Set to cPanel skin you use (script won't work if it doesn't match)



// Info required for SCP host

$ftpuser = "scpuser"; // Username for SCP account

$ftppass = "scppass"; // Password for SCP account

$ftphost = "scp.host.com"; // Full hostname or IP address for SCP host

$port = "22";

$ftpmode = "scp"; // FTP mode ("ftp" for active, "passiveftp" for passive, "scp" for scp)
$rdir = "/home/yourusername/Backup/";
 // make sure this folder exists on the destination host


// Notification information

$notifyemail = "you@youremail.com"; // Email address to send results



// Secure or non-secure mode

$secure = 0; // Set to 1 for SSL (requires SSL support), otherwise will use standard HTTP



// Set to 1 to have web page result appear in your cron log

$debug = 1;



// *********** Don't Touch!! *********



if ($secure) {

   $url = "ssl://".$domain;

   $port = 2083;

} else {

   $url = $domain;

   $port = 2082;

}



$socket = fsockopen($url,$port);

if (!$socket) { echo "Failed to open socket connection... Bailing out!\n"; exit; }



// Encode authentication string

$authstr = $cpuser.":".$cppass;

$pass = base64_encode($authstr);



$params = "dest=$ftpmode&rdir=$rdir&email=$notifyemail&server=$ftphost&port=$port&user=$ftpuser&pass=$ftppass&submit=Generate Backup";



// Make POST to cPanel

fputs($socket,"POST /frontend/".$skin."/backup/dofullbackup.html?".$params." HTTP/1.0\r\n");

fputs($socket,"Host: $domain\r\n");

fputs($socket,"Authorization: Basic $pass\r\n");

fputs($socket,"Connection: Close\r\n");

fputs($socket,"\r\n");



// Grab response even if we don't do anything with it.

while (!feof($socket)) {

  $response = fgets($socket,4096);

  if ($debug) echo $response;

}



fclose($socket);



?>
{% endhighlight %}

<p>If you need help with usage, it's exactly the same as in V_Nessa's original post, so read there, but now supports copying to a remote host over SSH.</p>