Запросы серверу через php

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

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

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

<?php
$port   
2002;
$server 'example.com';
$login  '[email protected]';
$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 - превращает имя файла в реальный  эффективный путь на отдалённой файловой системе.

И это далеко не весь список.

<?php
$sftp 
ssh2_sftp($con);
ssh2_sftp_mkdir($sftp'/new_directory');
ssh2_sftp_rmdir($sftp'/old_directory');
?>

Наиболее функциональной является ssh2_exec функция, которая даёт возможность выполнять доступные на сервере shell команды для данного пользователя.
<?php
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 коде, что значительно расштряет возможности для разработки.

Тэги:
libssh2, PHP, shell