2016-08-22 427 views
2

我使用ssh2_scp_send通过SFTP将文件从一台服务器传输到另一台服务器。尽管我可以确认对远程服务器的访问,并且可以使用GUI应用程序(FileZilla)传输文件,但我的ssh2_scp_send调用失败。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

ssh2_scp_send不做SFTP - 它做SCP。没有外壳访问权限,你不能进行SCP。

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

至于获取默认的完整远程路径... ssh2_sftp_realpath('.')应该做的伎俩。

+1

是的,这正是我发现的。我能够通过初始化ssh2_sftp然后使用file_get_contents/file_put_contents – lcdservices

相关问题