A library for performing remote copies. Copy to/from local, to/from remote, and even between two remote machines.
curl -s http://getcomposer.org/installer | php
php composer.phar require cullylarson/ssh-copy
You'll do everything with an instance of Cully\Ssh\Copier
. Its constructor takes three
parameters:
-
$sshSource (resource|null) (optional, default:null) An SSH connection resource. If null, will assume the source is the local machine. If its a resource, will assume the source is a remote machine.
-
$sshDestination (resource|null) (optional, default:null) An SSH connection resource. If null, will assume the destination is the local machine. If its a resource, will assume the destination is a remote machine.
-
$localTmp (string|null) (optional, default:null) If copying between two remote machines, the copy will first transfer the files to from the remote source, to the local machine, and then to the remote destination. So, you need to provide a temporary folder to house the files locally.
The Cully\Ssh\Copier::copy
function takes two arguments:
-
$sourceFilepath (string|array) (required) The path to the file that you want to copy from the source machine. Instead of passing a single path, you can pass an array of paths to files you want to copy. If an array is provided, the $destFilepath parameter must also be an array of the same length.
-
$destFilepath (string|array) (required) The path on the destination machine, where you want the file copied. Instead of passing a single path, you can pass an array of paths to files you want to copy. If an array is provided, the $sourceFilepath parameter must also be an array of the same length.
Returns: boolean True on success, false on fail.
NOTE: Currently the copy
function DOES NOT create parent folders. The folders must already exist.
Maybe something for a future release.
The Cully\Ssh\Copier::copyAssoc
function is similar to copy
, except it takes one argument:
- $sourceAndDest (array) (required) An associative array where keys are source file paths, and values are destination file paths.
Returns: boolean True on success, false on fail.
<?php
$sourceSsh = ssh2_connect("localhost", 22, array('hostkey'=>'ssh-rsa'));
ssh2_auth_agent($sourceSsh, "my_username");
$destSsh = ssh2_connect("localhost", 22, array('hostkey'=>'ssh-rsa'));
ssh2_auth_agent($destSsh, "my_username");
NOTE: If you're using RSA for the examples below, and you get an auth error, you might need to run this command:
$ eval `ssh-agent -s` && ssh-add
<?php
$copier = new Cully\Ssh\Copier();
$copier->copy("path/to/source", "path/to/dest");
<?php
$copier = new Cully\Ssh\Copier(null, $destSsh);
$copier->copy("path/to/source/on/local", "path/to/dest/on/remote");
<?php
$copier = new Cully\Ssh\Copier($sourceSsh, null);
$copier->copy("path/to/source/on/remote", "path/to/dest/on/local");
<?php
$copier = new Cully\Ssh\Copier($sourceSsh, $destSsh, "/local/tmp/folder");
$copier->copy("path/on/remote/source", "path/on/remote/dest");
<?php
$copier = new Cully\Ssh\Copier($sourceSsh, $destSsh, "/local/tmp/folder");
$copier->copy(
[ "path/on/remote/source/file1", "path/on/remote/source/file2" ],
[ "path/on/remote/dest/file1", "path/on/remote/dest/file2" ]
);
<?php
$copier = new Cully\Ssh\Copier($sourceSsh, $destSsh, "/local/tmp/folder");
$copier->copyAssoc([
"path/on/remote/source/file1" => "path/on/remote/dest/file1",
"path/on/remote/source/file2" => "path/on/remote/dest/file2"
]);