. */ require_once 'phing/Task.php'; /** * Execute commands on a remote host using ssh. * * @author Johan Van den Brande * @version $Id: SshTask.php 905 2010-10-05 16:28:03Z mrook $ * @package phing.tasks.ext */ class SshTask extends Task { private $host = ""; private $port = 22; private $username = ""; private $password = ""; private $command = ""; private $pubkeyfile = ''; private $privkeyfile = ''; private $privkeyfilepassphrase = ''; public function setHost($host) { $this->host = $host; } public function getHost() { return $this->host; } public function setPort($port) { $this->port = $port; } public function getPort() { return $this->port; } public function setUsername($username) { $this->username = $username; } public function getUsername() { return $this->username; } public function setPassword($password) { $this->password = $password; } public function getPassword() { return $this->password; } /** * Sets the public key file of the user to scp */ public function setPubkeyfile($pubkeyfile) { $this->pubkeyfile = $pubkeyfile; } /** * Returns the pubkeyfile */ public function getPubkeyfile() { return $this->pubkeyfile; } /** * Sets the private key file of the user to scp */ public function setPrivkeyfile($privkeyfile) { $this->privkeyfile = $privkeyfile; } /** * Returns the private keyfile */ public function getPrivkeyfile() { return $this->privkeyfile; } /** * Sets the private key file passphrase of the user to scp */ public function setPrivkeyfilepassphrase($privkeyfilepassphrase) { $this->privkeyfilepassphrase = $privkeyfilepassphrase; } /** * Returns the private keyfile passphrase */ public function getPrivkeyfilepassphrase($privkeyfilepassphrase) { return $this->privkeyfilepassphrase; } public function setCommand($command) { $this->command = $command; } public function getCommand() { return $this->command; } public function init() { if (!function_exists('ssh2_connect')) { throw new BuildException("To use SshTask, you need to install the SSH extension."); } return TRUE; } public function main() { $this->connection = ssh2_connect($this->host, $this->port); if (is_null($this->connection)) { throw new BuildException("Could not establish connection to " . $this->host . ":" . $this->port . "!"); } $could_auth = null; if ( $this->pubkeyfile ) { $could_auth = ssh2_auth_pubkey_file($this->connection, $this->username, $this->pubkeyfile, $this->privkeyfile, $this->privkeyfilepassphrase); } else { $could_auth = ssh2_auth_password($this->connection, $this->username, $this->password); } if (!$could_auth) { throw new BuildException("Could not authenticate connection!"); } $stream = ssh2_exec($this->connection, $this->command); if (!$stream) { throw new BuildException("Could not execute command!"); } stream_set_blocking( $stream, true ); while( $buf = fread($stream,4096) ){ print($buf); } fclose($stream); } } ?>