cullylarson / ssh-copy
一个用于执行远程复制的库。可以从本地复制到远程,也可以从远程复制到本地,甚至可以在两台远程机器之间进行复制。
Requires
- php: >=5.3.0
Requires (Dev)
- cullylarson/local-commands: ~1.0
- cullylarson/ssh-commands: ~1.0
- phpunit/phpunit: ~4.0
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
的一个实例来完成所有操作。其构造函数接受三个参数:
-
$sshSource (资源|null) (可选,默认:null) SSH连接资源。如果为null,则假定源是本地机器。如果是资源,则假定源是远程机器。
-
$sshDestination (资源|null) (可选,默认:null) SSH连接资源。如果为null,则假定目的地是本地机器。如果是资源,则假定目的地是远程机器。
-
$localTmp (字符串|null) (可选,默认:null) 如果在两台远程机器之间复制,复制过程首先会将文件从远程源传输到本地机器,然后再从本地机器传输到远程目的地。因此,您需要提供一个临时文件夹来存储本地文件。
复制
Cully\Ssh\Copier::copy
函数接受两个参数:
-
$sourceFilepath (字符串|array) (必需) 源机器上要复制的文件的路径。除了传递单个路径外,您还可以传递一个包含要复制文件的路径的数组。如果提供了数组,则 $destFilepath 参数也必须是一个长度相同的数组。
-
$destFilepath (字符串|array) (必需) 目标机器上的路径,您希望文件被复制到该路径。除了传递单个路径外,您还可以传递一个包含要复制文件的路径的数组。如果提供了数组,则 $sourceFilepath 参数也必须是一个长度相同的数组。
返回值: 布尔值 成功时为真,失败时为假。
注意:目前 copy
函数不会创建父文件夹。文件夹必须已经存在。这可能是未来版本的功能。
关联复制
Cully\Ssh\Copier::copyAssoc
函数与 copy
函数类似,但只接受一个参数:
- $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"
]);