使用 phpseclib SCP 下载二进制文件的问题

Problem to download binary file using phpseclib SCP

我有一个 PHP 小脚本,它使用 phpseclib 从远程服务器下载文件。

脚本如下:

    include('Net/SCP.php');
    echo var_dump($ssh->exec('whoami')); // debug to test the ssh connection. returns "myuser"
    $scp = new Net_SCP($ssh);
    try{
        $remotePath = '/home/user/test.txt';
        $localPath = '/tmp/myfile';
        if (!$scp->get($remotePath, $localPath)) {
            throw new Exception("Problems to get file");
        }
    } catch (Exception $e) {
        echo "\n\n" . var_dump($e->getMessage()) . "\n\n";die;
    }

SO 中有一些 other 问题使用了非常相似的片段。 它对许多文件来说就像一个魅力,但对某些二进制文件(例如$remotePath = '/home/user/test.p12';)却失败了。

使用 phpseclib 下载二进制文件是否有已知的限制(我在 their issues on github 中没有找到任何内容)?如果不是,我做错了什么?我是不是忘记了一些选项或什么?

附带说明 scp myuser@serverip:/home/user/test.p12 /tmp/teste.p12 在命令行中工作正常。

根据评论,我必须指出我的脚本刚刚失败。对于我尝试过的所有二进制文件,声明 $scp->get($remotePath, $localPath returns false。这就是我现在所拥有的。 据我所知,phpseclib 没有任何关于这些失败的详细日志。

我的应用程序日志 (nginx) 没有显示任何特殊内容。在我的远程服务器上访问日志(centOS。对于这些测试,我可以控制它,但它不是真实的场景)我得到如下内容:

Jul 27 15:22:58 localhost sshd[14101]: Accepted password for myuser from myip port 51740 ssh2
Jul 27 15:22:58 localhost sshd[14101]: pam_unix(sshd:session): session opened for user myuser by (uid=0)
Jul 27 15:22:58 localhost sshd[14103]: Received disconnect from myip port 51740:11:
Jul 27 15:22:58 localhost sshd[14103]: Disconnected from user myuser myip port 51740

PHP version: 7.3 (该脚本也用于旧版本的服务器)

本地服务器:Debian 10

远程服务器:CentOs 8

引发问题的问题文件是证书 p12 文件。

我发现了问题,它比我想象的要简单得多。这只是一个权限问题(出于任何充分的理由,我将所有测试文件放在一个没有读取权限的目录中)。

我决定在这里留下这个答案,因为我认为这在 phpseclib 文档中并不清楚,但是 'Net/SCP.php' 只适用于具有读取权限的文件,因此,在下载之前确保文件是可读或执行类似 chmod o+r filename.

问题中的代码片段适用于二进制文件。