Dan*_*son 6 ssh openssh laravel
我在一台服务器(服务器A)上托管了一个Laravel 4.2项目,我需要能够从该应用程序上传文件,并将文件传输到位于同一本地网络(服务器B)上的Windows服务器.
我在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;
});
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
unpack(): Type N: not enough input, need 4, have 1
Run Code Online (Sandbox Code Playgroud)
我尝试在服务器B上运行的每个命令都收到此错误.奇怪的是,如果我尝试使用相同的代码,但将其指向Linux服务器,代码工作正常.这会让我相信SSH服务器可能在服务器B上设置不正确,但我可以在终端窗口中通过SSH 从服务器A连接到服务器B的事实混淆了整个问题!
有谁知道我收到的错误的含义?
Laravel 4.2 的 SSH 是 Facade,它将解析为Illuminate\Remote\RemoteManager. 它的into()方法将返回Illuminate\Remote\Connection实例,然后使用SecLibGateway封装库的实例phpseclib。SecLibGateway将返回 phpseclib 的实例System_SSH_Agent(请参阅vendor/phpseclib/phpseclib/phpseclib/SystemLaravel 4.2 安装目录中的 SSH_Agent.php)。在 System_SSH_Agent 的构造函数内,第 248 行:
$this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
Run Code Online (Sandbox Code Playgroud)
它打开到 unix:// 的套接字连接。OP 说 SSH 在 Linux 服务器中有效,但在 Windows 服务器中无效。我相信这可能是罪魁祸首。对 PHP 函数的调用很少,unpack()如第 274 行:
$length = current(unpack('N', fread($this->fsock, 4)));
Run Code Online (Sandbox Code Playgroud)
它使用类型 N 调用 unpack(),并需要输入 4 个数字。不知何故,fsock 无效并导致出现错误消息。
| 归档时间: |
|
| 查看次数: |
776 次 |
| 最近记录: |