【问题标题】:ssh2_scp_send: fails, perhaps because of unknown remote dirssh2_scp_send:失败,可能是因为未知的远程目录
【发布时间】:2016-12-29 15:25:52
【问题描述】:

我正在使用 ssh2_scp_send 通过 SFTP 将文件从一台服务器传输到另一台服务器。虽然我可以确认对远程服务器的访问并且可以使用 GUI 应用程序 (FileZilla) 传输文件,但我的 ssh2_scp_send 调用失败了。

我认为这可能是因为我不知道(也不容易找到)远程服务器的完整路径。我假设如果我只是传递文件名,它将默认为允许用户访问的父目录。

$conn = ssh2_connect('domain', 22);
$auth = ssh2_auth_password($conn, 'user', 'password');

if ($auth) {
  //send the file
  $send = ssh2_scp_send($conn, $file, $data['xml_filename']);
}

我尝试使用ssh2_exec($ssh_conn, 'ls -la'); 检索目录并尝试找出位置,但失败了(我的访问凭据不允许除 SFTP 之外的 SSH 命令)。

我的问题:

  1. 有没有一种简单的方法可以找出完整的远程路径?
  2. 有没有办法告诉 ssh2_scp_send 只使用默认目标?
  3. 我还应该排除哪些其他问题?我只是猜测上面是问题所在——它可能完全不同。

【问题讨论】:

    标签: php sftp scp


    【解决方案1】:

    ssh2_scp_send 不做 SFTP - 它做 SCP。没有 shell 访问权限就无法执行 SCP。

    如果您坚持使用 libssh2 与 phpseclib,那么您将不得不使用 ssh2.sftp:// fopen 包装器,然后使用 fwrite()fputs()

    至于获取默认的完整远程路径...ssh2_sftp_realpath('.') 应该可以解决问题。

    【讨论】:

    • 是的,这正是我发现的。我能够通过初始化 ssh2_sftp 然后使用 file_get_contents/file_put_contents 来传输它
    猜你喜欢
    • 2021-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2012-02-24
    • 2016-03-18
    • 2023-01-04
    • 2020-03-21
    • 2016-08-26
    相关资源
    最近更新 更多