【问题标题】:PHP SSH2 PECL extension issuesPHP SSH2 PECL 扩展问题
【发布时间】:2017-01-04 23:53:15
【问题描述】:

在我开始之前,我知道 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);
}

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

问题: 更新 ssh 组合 url/凭据后,文件传输不再工作。

我尝试过的: 我尝试使用 Linux(不是 PHP)进行测试文件传输,并且成功了。我也使用 Filezilla SSH 并以这种方式传输文件,没问题。所以我已经确认主机/用户/密码组合是正确的。

我把file_put_contents的结果转储出来了,结果是假的。

我把 $conn、$auth 和 $sftp 以及 "ssh2.sftp://".$sftp.$remoteFilePath 是什么样子的,结果是(按顺序)

  1. resource(27) 类型(SSH2 会话)
  2. 布尔(真)
  3. resource(30) 类型 (SSH2 SFTP)
  4. ssh2.sftp://Resource id #30/Orders/test.txt

请注意,test.txt 是一个非常小的文件,以排除文件大小问题。

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

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

任何想法将不胜感激。

【问题讨论】:

  • 到目前为止一切都很好......但你没有提到问题是什么......
  • @Dekel 抱歉,我以为我很清楚,但我对帖子进行了一些编辑。问题是文件传输没有发生,并且 file_put_contents 现在返回 false。所以文件传输以某种方式失败了。

标签: php linux ssh


【解决方案1】:

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

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

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

【讨论】:

  • 非常感谢!不知道为什么这行得通,而其他东西不再行了,但我会接受的!
猜你喜欢
  • 2010-10-08
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2012-04-10
  • 2023-04-08
  • 1970-01-01
  • 2018-04-03
  • 2014-11-25
相关资源
最近更新 更多