【问题标题】:Laravel SSH on Windows ServerWindows 服务器上的 Laravel SSH
【发布时间】:2016-05-12 19:57:25
【问题描述】:

我有一个 Laravel 4.2 项目托管在一台服务器(服务器 A)上,我需要能够从该应用程序上传文件并将文件传输到位于相同的本地网络(服务器 B)。

我已经在 Windows 服务器上安装了 OpenSSH 并启动了该服务。我可以确认这是有效的,因为我可以在服务器 A 上的终端中成功连接。

在 Laravel 项目中,我在 app/config/remote.php 文件中创建了连接。

但是当我尝试使用以下代码在服务器 A 上的 Laravel 项目中运行命令时:

SSH::into('ServerB')->run(['IF EXIST folder (echo YES) ELSE (echo NO)'], function($line){
    echo $line.PHP_EOL;
});

我收到以下错误:

unpack(): Type N: not enough input, need 4, have 1

我尝试在服务器 B 上运行的每个命令都收到此错误。奇怪的是,如果我尝试使用相同的代码但将其指向 Linux 服务器,则代码可以正常工作。这会让我相信 SSH 服务器可能在服务器 B 上设置不正确,但事实上我可以通过 SSH 从服务器 连接到服务器 B终端窗口中的一个混淆了整个问题!

有人知道我收到的错误的含义吗?

【问题讨论】:

  • 您的 Laravel 4.2 项目托管在哪个 PHP 版本上?
  • 我对Laravel不是很了解,但是在phpeclib上发现了一个类似的问题报告,去年修复了:github.com/terrafrost/phpseclib/commit/…
  • 发布您的日志echo $ssh->getLog(); 并检查您的主机和防火墙
  • unpack(): Type N: not enough input, need 4, have 1 错误是不言自明的,您没有提供足够的输入,因为程序期望 4 但您提供了一个输入
  • 听起来更像是服务器权限问题而不是 Laravel 问题。

标签: laravel ssh openssh


【解决方案1】:

这可能是phpseclib 的问题。检查您是否安装了最新版本,如果可能,请更新。

【讨论】:

    【解决方案2】:

    Laravel 4.2 的 SSH 是 Facade,它将解析为 Illuminate\Remote\RemoteManager。它的into() 方法将返回Illuminate\Remote\Connection 实例,然后使用封装phpseclib 库的SecLibGateway 实例。 SecLibGateway 将返回 phpseclib 的 System_SSH_Agent 实例(请参阅 Laravel 4.2 安装中 vendor/phpseclib/phpseclib/phpseclib/System 目录中的 SSH_Agent.php)。在 System_SSH_Agent 的构造函数内部,第 248 行:

    $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
    

    它打开到 unix:// 的套接字连接。 OP 说 SSH 在 Linux 服务器中有效,但在 Windows 服务器中无效。我相信这可能是罪魁祸首。很少调用 PHP 的 unpack() 函数,例如第 274 行:

    $length = current(unpack('N', fread($this->fsock, 4)));
    

    它调用类型为 N 的 unpack(),需要输入 4 个数字。不知何故 fsock 无效并导致出现错误消息。

    【讨论】:

      【解决方案3】:

      在“输入数据不正确时出现警告”时似乎出现这种错误cfr this post

      这可能是由于 php.ini 中的设置,即“magic_quotes_runtime 通过在从外部源(如文本文件)读取的内容中添加反斜杠来工作,有效地破坏像 .mo 文件这样的二进制输入,并破坏读取的配置设置来自数据库..." cfr this post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-22
        • 2018-02-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 2020-05-12
        • 2010-12-15
        相关资源
        最近更新 更多