PHP SSH2 PECL扩展问题

时间:2017-01-04 23:53:16

标签: php linux ssh

在我开始之前,我已经知道了phpseclib,而且我已经准备好了你应该采用的方式。不幸的是我正在研究一个较旧的脚本,我正在努力避免设置phpseclib,测试本地环境,投入生产,测试生产,重构我的脚本等所需的时间。我希望有人可以帮助我解决ssh2的问题。

我使用以下脚本将文件ssh到客户端的服务器。它运作良好多年。

<?php

$url = 'their.url.com';
$userName = 'name';
$password = 'pass';

$conn = ssh2_connect($url, 22);
$auth = ssh2_auth_password($conn, $userName, $password);

// Determine whether this is a file path that needs to be opened or not
$localFilePath = 'test123.txt';
$openFile = fopen($localFilePath, "r");

$fileName = 'test.txt';
// Their server path
$remoteFilePath = "/Orders/".$fileName;

if ($auth === true) {
    // Transfer file
    $sftp = ssh2_sftp($conn);

    file_put_contents("ssh2.sftp://".$sftp.$remoteFilePath, $openFile);
}

发生了什么: 我的客户将他的东西搬到了另一台服务器上。它打破了连接,他吓坏了,等等。他给了我更新的凭据到新服务器,我已经确认protocal是SFTP - SSH文件传输协议。

问题: 更新ssh combo url / credentials后,文件传输不再有效。

我做了什么: 我尝试使用Linux(而不是PHP)进行测试文件传输,但它确实有用。我也使用Filezilla ssh'd并以这种方式传输文件,没问题。所以我已经确认host / user / pass组合是正确的。

我抛弃了file_put_contents的结果,它是假的。

我抛出$ conn,$ auth和$ sftp,以及“ssh2.sftp://”。$ sftp。$ remoteFilePath看起来像,结果是(按顺序)

  1. 类型(SSH2会话)的资源(27)
  2. BOOL(真)
  3. 类型(SSH2 SFTP)的资源(30)
  4. ssh2.sftp://资源ID#30 / Orders / test.txt
  5. 请注意,test.txt是一个非常小的文件,可以排除文件大小问题。

    我还卸载并重新安装了ssh2 PECL扩展。

    我确信这是由于他们的问题,因为这个脚本以前一直有效,我只是感到困惑,为什么现在因为他们在他们的新服务器上而失败了,我不是确定如何进一步诊断问题。我无法想到对我的服务器所做的任何改变都会影响到这一点。

    非常感谢任何想法。

1 个答案:

答案 0 :(得分:1)

为什么不直接使用ssh2.sftp://流?

file_put_contents("ssh2.sftp://{$userName}:{$password}@{$url}:22/{$remoteFilePath}", $openFile);

它应该在没有所有ssh连接,身份验证,移动到sftp等的情况下工作。