在 Phing 中使用 SSH 和 SCP
Phing允许在服务器上运行SSH命令并通过SCP将文件复制到服务器。在Phing中使用SSH和SCP命令之前,您需要安装PECL扩展SSH2。SSH2PECL扩展需要libssh2包,因此您需要在开始之前安装它。以下安装说明基于Linux环境。
从www.libssh2.org下载libssh2包并使用以下命令安装它。您的软件包版本可能会有所不同。
sudo tar -zxvf libssh2-1.3.0.tar.gz cd libssh2-1.3.0 ./configure make sudo make install
您需要在最后一个命令中使用sudo以允许makeinstaller访问某些系统目录。
接下来,您需要安装SSH2PECL扩展,但由于它目前处于测试状态,您需要提供库版本的完整路径以及正常的安装命令。
sudopeclinstallpecl.php.net/ssh2-0.11.3
如果您收到有关未在php.ini文件中设置内容的错误,那么您需要将以下内容添加到您的php.ini文件中。在我的Ubuntu版本上,我有不同php.ini的apache和cli文件,但是在使用Phing时,您只需要将其添加到您的cli文件中。要查看加载的php.ini文件在哪里,请输入命令php--ini。标题行在这里是可选的,但为了清楚起见,我添加了。
[ssh2] extension=ssh2.so
完成所有这些后,您现在可以开始在Phing中使用SSH和SCP任务。
Phing中的SSH任务用于向相关服务器发送单个命令。这可能是诸如更改目录权限或清理日志文件之类的事情,但它本质上是您可以通过普通SSH访问执行的任何操作。您一次只能发出一个命令,这意味着您不能在一个命令上更改目录,然后在下一个命令的同一目录中执行某些操作。如果您需要执行这样的复杂命令,那么您可能需要考虑使用bash脚本。以下是使用pwd命令连接到内部IP地址的服务器并打印出当前工作目录的示例。此任务需要用户名、密码和命令字段。
请注意,为方便起见,此处包含了构建文件的其余部分,但出于简洁的原因,在后面的示例中将其排除在外。
您所做的任何创建输出的操作都会被Phing读回,并且可以将其打印出来或将其分配给一个属性。默认行为(在上面的示例中列出)是在任务运行时打印返回的输出。要将输出分配给属性,您需要使用SSH任务的属性属性。下面的示例与上面的示例类似,但在此示例中,返回值将作为echo任务中的变量打印出来。display属性设置为false以抑制返回输出的打印。
The present working directory is ${mypwd}
这就是SSH任务的内容,还有许多其他属性可用于允许连接到不同的ssh设置,但上述细节是其工作原理的基本要素。要了解有关ssh任务的更多信息,请查看PhingSSH任务手册。
SCP任务类似于SSH任务,因为它具有相同的连接参数集,但旨在允许从服务器复制文件或向服务器复制文件。最简单的示例是将文件复制到远程服务器,运行时将执行以下代码段。todir属性用于让脚本知道将文件复制到哪个目录,文件属性用于确定将复制哪个文件。
要复制多个文件,您需要排除文件属性并在SCP任务中包含一个文件集元素。以下代码段将复制项目目录中的任何PHP文件(不包括任何以Test结尾的PHP文件)和一个调用README.txt到远程服务器的文件。
也可以使用fetch属性从远程服务器获取文件。默认情况下,它设置为false,但如果您明确将其设置为true,那么它将从服务器获取文件。
这在下载单个文件时很有用,但在使用fetch方法时,目前无法在SCP任务中包含文件集元素(因此无法包含多个文件)。
还有一个名为autocreate的属性,它将允许(如果设置为默认值true)或限制目录的自动创建。如果此属性设置为false,则当您将项目复制到远程服务器时,不会自动创建目录。这意味着如果任何文件依赖于具有预先确定的目录结构,则您的构建可能会失败。
level属性将接受许多不同的值。它们是错误、警告、信息、详细和调试。此设置仅更改Phing报告复制过程的方式,并默认设置为详细。将此设置为error、warning和info将使Phing打印出复制的每个文件,在最后给出概要,并将输出消息的颜色分别更改为红色、紫色和正常。Verbose和debug只会打印出复制的文件数量,但自定义记录器可以使用它们来做不同的事情。
要了解有关SCP任务中可用的其他选项的更多信息(主要与其他SSH连接参数有关),请查看Phing网站上的SCP任务文档。