Блог

В ходе разработки программ иногда возникает необходимость в таких действиях/командах, для выполнения которых прав доступа недостаточно или отсутствует доступ к некоторым директориям у пользователя, из-под которого запущен на сервере и исполняется Друпал. Выход из данной ситуации в использовании библиотеки libssh2: она обеспечивает доступ к ресурсам (shell) отдалённого сервера, используя при этом зашифрованное соединение.

Shell (от англ. оболочка) - это интерпретатор команд операционной системы.

Для использования shell команд в php, необходимо знать следующее: порт, хост, имя пользователя, пароль. Для соединения с сервером используется функция ssh2_connect, для авторизации пользователя - ssh2_auth_password.

$port   = 2002;
$server = 'example.com';
$login  = '';
$pass   = '12345';
if (!function_exists("ssh2_connect")) {
 exit("ssh2_connect disable");
}
if(!($con = ssh2_connect($server, $port))){ 
//переменный $con в случае успешного соединения
//присваивается ссылка идентификатора SSH з’соединения, 
//необходимое позже для вызова функции ssh2_auth_password, 
//при неудачном соединении присваеваится значение FALSE.
  exit("could not connect to {$server} with port {$port}");
}
if(!ssh2_auth_password($con, $login, $pass)) {
 exit("login/password is incorrect");
}

Кроме этого существуют следующие пути авторизации:

  • ssh2_auth_hostbased_file - авторизация с использованием публичного HOSTKEY;
  • ssh2_auth_none - авторизация методом "none" (он обычно недоступен);
  • ssh2_auth_pubkey_file - авторизация с использованием публичного ключа.

Например, после восстановления соединения, становятся доступными такие sftp функции:

  • ssh2_sftp_mkdir - создание директорий;
  • ssh2_sftp_rename - переименование отдалённых файлов;
  • ssh2_sftp_rmdir - удаление директорий;
  • ssh2_sftp_unlink - удаление файлов;
  • ssh2_sftp - Инициализация подсистемы SFTP с уже подключенным сервером SSH2;
  • ssh2_sftp_realpath - превращает имя файла в реальный  эффективный путь на отдалённой файловой системе.

И список далеко не исчерпывается пунктами, представленными выше.

$sftp = ssh2_sftp($con);
ssh2_sftp_mkdir($sftp, '/new_directory');
ssh2_sftp_rmdir($sftp, '/old_directory');

Наиболее функциональной является ssh2_exec функция, ибо она даёт возможность выполнять доступные на сервере shell команды для данного пользователя.

if (!(ssh2_exec($con, "rm {$file}" ))) {
 exit("remove file failed");
}  
if (!(ssh2_exec($con, "cp {$path_from} {$path_to}" ))) {
 exit("file copy failed");
}

То есть данная библиотека позволяет использовать shell команды в php коде, что значительно расширяет возможности для разработки.

Join the conversation
0 Comments