ssh2_scp_send:失败,可能是因为未知的远程目录


ssh2_scp_send: fails, perhaps because of unknown remote dir

我使用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_scpsend只使用默认目的地
  3. 我还应该解决哪些问题?我只是猜测以上就是问题所在——这可能是完全不同的事情

ssh2_scp_send不执行SFTP,而是执行SCP。如果没有shell访问,就无法执行SCP。

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

至于获取默认的完整远程路径。。。ssh2_sftp_realpath('.')应该做到这一点。