【问题标题】:How do I retrieve a remote file and store it on the local machine on PHP (using OpenSSH/SCP)?如何检索远程文件并将其存储在 PHP 上的本地计算机上(使用 OpenSSH/SCP)?
【发布时间】:2020-11-29 12:45:51
【问题描述】:

正如标题所述,我无法通过 PHP 从远程 SSH 服务器检索文件。

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

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

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

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

【问题讨论】:

    标签: php ssh scp openssh


    【解决方案1】:

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

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

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

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

    # 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 等。

    【讨论】:

    • 我使用 shell_exec() 的原因是我使用 OpenSSH 进行本地和远程机器之间的 SSH 通信。上述方法(例如:ssh2_connect)是否可以与 OpenSSH 一起使用,还是我需要寻找替代的 SSH 服务器/客户端实用程序?
    • php 的 SSH 库也使用 OpenSSH 进行通信:您可以指向相同的身份(密钥)文件。如果您仍然喜欢使用 shell_exec 等,请务必记住,如果您使用网络服务器打开 PHP 文件,那么通常您会使用不同的用户(例如 nginxwww-data 等)访问它,因此您应该设置密钥除了您通常使用的用户之外,还适用于此类用户。
    • 啊,我明白了,由于 PHP 的 SSH 库也使用 OpenSSH,我不介意尝试您建议的上述方法!关于 php 的 SSH 库(是 SSH2 吗?),您是否有任何推荐的资源可供我参考,以帮助我更改代码以使用它而不是 shell_exec
    • 没错,这个库叫做“ssh2”。您通常可以通过键入apt-get install php7-ssh2apt-get install php-ssh2 等将其安装在基于debian 的系统上。PHP 文档中很好地记录了纯用法、连接和下载:例如php.net/manual/en/function.ssh2-scp-recv.php / 如果您不想使用上述库只有纯 php-ssh2 然后我会说一个好的开始是在内部检查它用于各个方法的方法。但是我还是建议使用它,它的贡献者很少,甚至被thephpleague使用了一段时间。
    • 抱歉问了更多问题哈哈,但是“ssh2”库在 Windows 上是否可用(或者更确切地说,可以安装)?这是因为我使用 XAMPP 在 Windows 机器上运行 php 网站。除此之外,我正在访问的远程机器还包括一台 Windows 机器以及一台 Ubuntu 机器。感谢您迄今为止的帮助/答案,非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2013-06-13
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多