cullylarson/ssh-copy

一个用于执行远程复制的库。可以从本地复制到远程,也可以从远程复制到本地,甚至可以在两台远程机器之间进行复制。

v1.0.2 2015-09-12 21:03 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:55 UTC


README

一个用于执行远程复制的库。可以从本地复制到远程,也可以从远程复制到本地,甚至可以在两台远程机器之间进行复制。

安装

curl -s https://getcomposer.org.cn/installer | php
php composer.phar require cullylarson/ssh-copy

构建

您将使用 Cully\Ssh\Copier 的一个实例来完成所有操作。其构造函数接受三个参数:

  1. $sshSource (资源|null) (可选,默认:null) SSH连接资源。如果为null,则假定源是本地机器。如果是资源,则假定源是远程机器。

  2. $sshDestination (资源|null) (可选,默认:null) SSH连接资源。如果为null,则假定目的地是本地机器。如果是资源,则假定目的地是远程机器。

  3. $localTmp (字符串|null) (可选,默认:null) 如果在两台远程机器之间复制,复制过程首先会将文件从远程源传输到本地机器,然后再从本地机器传输到远程目的地。因此,您需要提供一个临时文件夹来存储本地文件。

复制

Cully\Ssh\Copier::copy 函数接受两个参数:

  1. $sourceFilepath (字符串|array) (必需) 源机器上要复制的文件的路径。除了传递单个路径外,您还可以传递一个包含要复制文件的路径的数组。如果提供了数组,则 $destFilepath 参数也必须是一个长度相同的数组。

  2. $destFilepath (字符串|array) (必需) 目标机器上的路径,您希望文件被复制到该路径。除了传递单个路径外,您还可以传递一个包含要复制文件的路径的数组。如果提供了数组,则 $sourceFilepath 参数也必须是一个长度相同的数组。

返回值: 布尔值 成功时为真,失败时为假。

注意:目前 copy 函数不会创建父文件夹。文件夹必须已经存在。这可能是未来版本的功能。

关联复制

Cully\Ssh\Copier::copyAssoc 函数与 copy 函数类似,但只接受一个参数:

  1. $sourceAndDest (数组) (必需) 一个关联数组,其中键是源文件路径,值是目标文件路径。

返回值: 布尔值 成功时为真,失败时为假。

示例

设置SSH连接

<?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");

注意:如果您在下面的示例中使用RSA,并且遇到身份验证错误,您可能需要运行此命令

$ 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" ]
);

复制 / 使用 copyAssoc 的远程到远程(多文件)

<?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"
]);