2016-08-22 8 views
2

SFTP를 통해 한 서버에서 다른 서버로 파일을 전송할 때 ssh2_scp_send를 사용하고 있습니다. 원격 서버에 대한 액세스를 확인하고 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를 할 수 없습니다.

당신이 phpseclib 대 libssh2 사용에 대한 고집이 있다면 당신은 ssh2.sftp://는 fopen 래퍼를 사용해야합니다 다음 fwrite() 또는 fputs()을한다.

기본 전체 원격 경로를 얻는 방법은 ... ssh2_sftp_realpath('.') 트릭을 수행해야합니다.

+1

네, 그게 정확히 제가 발견 한 것입니다. ssh2_sftp를 초기화 한 다음 file_get_contents/file_put_contents를 사용하여 전송할 수있었습니다. – lcdservices