2011-06-20 14 views
6

Jak mogę sprawdzić, czy katalog "xyz" istnieje na zdalnym serwerze SSH przy użyciu PHP-SSH2?Sprawdź katalog zdalny za pomocą PHP SSH2

+2

Sprawdź instrukcję tutaj http://www.php.net/manual/en/function.ssh2-exec. php – powtac

+0

i klucze wymiany lub musisz podać nazwę użytkownika/hasło do skryptu php do pracy. Jeśli wymieniasz klucze, weź pod uwagę, że musisz to zrobić z użytkownikiem apache, jeśli wykonasz skrypt za pomocą apache. –

+0

Nie mówię o ustanowieniu połączenia ssh. Muszę sprawdzić konkretny katalog, który może istnieć na serwerze po połączeniu. – World

Odpowiedz

16

Można użyć file_exists używając sftp poprzedzając 'ssh2.sftp: //'

na przykład z Ustanowiony połączenia można:

$sftp = ssh2_sftp($connection); 
$fileExists = file_exists('ssh2.sftp://' . $sftp . '/home/marco'); 
1

zakładając jest serwer Linux

$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 
$cmd = 'if test -d "/YOUR_DIRECTORY"; then echo 1; fi'; 
$stream = ssh2_exec($connection, $cmd); 
3

Polecam porzucenie PHP SSH2 zamiast phpseclib, a pure PHP SSH implementation.

Między innymi, API PHP SSH2 jest do bani. Klucze prywatne muszą być zapisane w systemie plików do załadowania, podczas gdy phpseclib wszystko, co potrzebne, to ciągi. Możesz pobrać klucz z $ _POST bez konieczności zrzucania go do systemu plików, tak jak wymaga tego libssh2. Libssh2 wymaga oddzielnego pliku dla publickey, który jest nieaktywny, ponieważ klucz prywatny zawiera klucz publiczny.

ssh2_exec(), z biblioteki libssh2, zwraca również kody kolorów ANSI i czasami nigdy nie zwraca wyników, a czasami robi (jest niespójne).

Wreszcie phpseclib to just plain faster.

+0

'phpseclib' nie jest szybszy, jeśli chodzi o auth z kluczem prywatnym. Użycie przyzwoitej siły klawisza może spowodować, że połączenia będą trwały ponad 10 sekund. 'klucz prywatny zawiera klucz publiczny', to jest złe. Nie zmienia to faktu, że klucz publiczny nie jest wymagany dla ssh. Nie podoba mi się ssh2 limited key-as-filepath, ale nie szkodzi to bezpieczeństwu modułu i może być łatwo zawinięte za pomocą funkcji do utworzenia pliku tymczasowego. 'phpseclib' jest świetny, jeśli nie zależy Ci na szybkości lub wykorzystaniu procesora, ale powiedziałbym, że jako osoba, która użyła obu tak szeroko,' ssh2' jest znacznie szybsza i bezbłędna. –

+2

phpseclib miał aktualizację kilka miesięcy temu, która powinna przyspieszyć autoryzację klucza prywatnego. Szczegółowe informacje można znaleźć na stronie http://phpseclib.sourceforge.net/math/intro.html. – neubert

0
<?php 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 

$stream = file_exists("ssh2.sftp://$sftp/path/to/file"); 
?> 
0

Aby sprawdzić, czy pilot ścieżka jest folder lub plik przy użyciu PHP_SSH2

$path="/tmp"; 
$connection = ssh2_connect('shell.example.com', 22); 
ssh2_auth_password($connection, 'username', 'password'); 

$sftp = ssh2_sftp($connection); 
$isdir = is_dir("ssh2.sftp://$sftp/$path"); 
    if ($isdir ==true) { 
      echo "The Remote Folder is a Directory".PHP_EOL; 
    } 
    else { 
      $isfile = file_exists("ssh2.sftp://$sftp/$path"); 
      if ($isfile == true) { 
       echo "The Remote Path is a File".PHP_EOL; 
      } 
    } 
Powiązane problemy