如何检索远程文件并将其存储在 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_recv
、ssh2_connect
等
如标题所述,我在通过 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_recv
、ssh2_connect
等