ssh2_scp_send:失败,也许是因为未知的远程目录

时间:2016-08-22 23:49:12

标签: php sftp scp

我使用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');检索目录并尝试找出位置,但是失败了(访问凭据我不允许SSH命令与SFTP分开)。

我的问题:

  1. 有一种简单的方法可以找到完整的远程路径吗?
  2. 有没有办法告诉ssh2_scp_send只使用默认目的地?
  3. 我应该解决哪些其他问题?我只是猜测上面是问题 - 它可能是完全不同的东西。

1 个答案:

答案 0 :(得分:1)

ssh2_scp_send没有做SFTP - 它会做SCP。没有shell访问权限,您无法进行SCP。

如果您坚持使用libssh2 vs phpseclib,那么您必须使用ssh2.sftp:// fopen包装,然后执行fwrite()fputs()

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