使用 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
.
问题中的代码片段适用于二进制文件。
我有一个 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
.
问题中的代码片段适用于二进制文件。