如何检索远程文件并将其存储在 PHP 的本地计算机上(使用 OpenSSH/SCP)?

How do I retrieve a remote file and store it on the local machine on PHP (using OpenSSH/SCP)?

如标题所述,我在通过 PHP 从远程 SSH 服务器检索文件时遇到问题。

我可以通过命令 Shell 检索文件,但是当我尝试通过 PHP 检索文件时,它似乎不起作用。

例如,这是我的代码在 PHP 脚本中的样子:

echo shell_exec(scp $remoteUser@$remoteIP:$remoteFilePath $localFilePath);

就上下文而言,此 PHP 脚本适用于网页。在上述命令之前,我还有另一个 SCP 命令(我将本地文件复制到远程服务器)和一个 SSH 命令,这些命令能够成功执行,没有任何问题(这些命令是通过 shell_exec( ) 以及)。

我建议使用有助于 SFTP 或 SCP 使用的库 - 例如 idct/sftp-client: https://github.com/ideaconnect/idct-sftp-client

将其包含在您的项目中,然后创建一个实例:

use IDCT\Networking\Ssh\SftpClient;
use IDCT\Networking\Ssh\Credentials;
$client = new SftpClient();

然后创建设置正确的凭据 - 密码或 public 密钥:

# password
$credentials = Credentials::withPassword($username, $password);
$client->setCredentials($credentials);

# or key:
$credentials = Credentials::withPublicKey($username, $publicKey, $privateKey, $passphrase = null);
$client->setCredentials($credentials);

然后连接并下载您的文件:

$client->connect($host);

# using sftp
$client->download(ENTER_REMOTE_FILE_NAME);

# or scp
$client->scpDownload(ENTER_REMOTE_FILE_NAME);

$client->close();

它比使用不太安全和依赖于系统的 shell_exec 优雅得多。您也可以自己使用所有方法:ssh2_scp_recvssh2_connect