Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过ssh在PHP中执行远程命令?_Php_Ssh - Fatal编程技术网

如何通过ssh在PHP中执行远程命令?

如何通过ssh在PHP中执行远程命令?,php,ssh,Php,Ssh,我试图通过ssh从php脚本中执行远程命令,我希望命令(stdout和stderr)的输出流式传输到原始主机 我知道在Perl和Ruby中这是可能的。我在php中找不到任何这样的例子 代码: 通过ssh在PHP中执行远程命令的最佳方式是什么?您安装了SSH2软件包吗 安装PECL SSH2包是一个PITA。试试看。请看这篇文章,了解不惜一切代价避免PECL SSH2扩展的原因: 如果由于繁文缛节而无法添加php包,这里有一个简单的类可以实现这一点 class ExecuteRemote {

我试图通过ssh从php脚本中执行远程命令,我希望命令(stdout和stderr)的输出流式传输到原始主机

我知道在Perl和Ruby中这是可能的。我在php中找不到任何这样的例子

代码:


通过ssh在PHP中执行远程命令的最佳方式是什么?

您安装了SSH2软件包吗


安装PECL SSH2包是一个PITA。试试看。请看这篇文章,了解不惜一切代价避免PECL SSH2扩展的原因:


如果由于繁文缛节而无法添加php包,这里有一个简单的类可以实现这一点

class ExecuteRemote
{
    private static $host;
    private static $username;
    private static $password;
    private static $error;
    private static $output;

    public static function setup($host, $username=NULL, $password=NULL)
    {
        self::$host = $host;
        self::$username = $username;
        self::$password = $password;
    }

    public static function executeScriptSSH($script)
    {
        // Setup connection string
        $connectionString = self::$host;
        $connectionString = (empty(self::$username) ? $connectionString : self::$username.'@'.$connectionString);

        // Execute script
        $cmd = "ssh $connectionString $script 2>&1";
        self::$output['command'] = $cmd;
        exec($cmd, self::$output, self::$error);

        if (self::$error) {
            throw new Exception ("\nError sshing: ".print_r(self::$output, true));
        }

        return self::$output;
    }
}

至少在ubuntu上:以下说明有效:

通过SSH密钥管理身份验证,它非常简单:

$cmd = 'ssh user@host script ' . $arguments . ' 2>/dev/null';
$result = shell_exec($cmd);

PHP5.5

看起来您还没有安装pecl ssh2包。我确实尝试过安装ssh2,@sudo pecl install ssh2channel://pecl.php.net/ssh2-v 问题是:未能在首选状态“稳定”下下载pecl/ssh2,最新版本为0.11.2版,稳定性为“beta”,使用channel://pecl.php.net/ssh2-0.11.2"要安装parsePackageName():“version”既不是有效版本,也不是中的有效状态channel://pecl.php.net/ssh2-version“无效的包名称/包文件”channel://pecl.php.net/ssh2-version“安装失败,如果我从源代码处尝试,但不知道如何编译config.m4,我尝试了,安装失败sudo pecl install ssh2channel://pecl.php.net/ssh2-version 测试仪的[sudo]密码:未能在首选状态“稳定”下下载pecl/ssh2,最新版本为0.11.2版,稳定性为“beta”,使用channel://pecl.php.net/ssh2-0.11.2“要安装parsePackageName():“版本”在“”中既不是有效版本也不是有效状态channel://pecl.php.net/ssh2-version“无效的包名称/包文件”channel://pecl.php.net/ssh2-version“安装失败你是说他可以添加一个php包,如果这不是一个危险信号的话。你说的是什么样的PHP包?第三方图书馆?有什么建议吗?我想我指的是ssh2 pecl包。然而,自从5年前回答这个问题以来,Composer已经成为php的一个有用工具。查看getcomposer.org,获取您可能需要的所有软件包。
class ExecuteRemote
{
    private static $host;
    private static $username;
    private static $password;
    private static $error;
    private static $output;

    public static function setup($host, $username=NULL, $password=NULL)
    {
        self::$host = $host;
        self::$username = $username;
        self::$password = $password;
    }

    public static function executeScriptSSH($script)
    {
        // Setup connection string
        $connectionString = self::$host;
        $connectionString = (empty(self::$username) ? $connectionString : self::$username.'@'.$connectionString);

        // Execute script
        $cmd = "ssh $connectionString $script 2>&1";
        self::$output['command'] = $cmd;
        exec($cmd, self::$output, self::$error);

        if (self::$error) {
            throw new Exception ("\nError sshing: ".print_r(self::$output, true));
        }

        return self::$output;
    }
}
$cmd = 'ssh user@host script ' . $arguments . ' 2>/dev/null';
$result = shell_exec($cmd);