Контакты:

WHMCS SSH Plesk модуль

Еще один проект 2016-го года. Довольно интересный. Один из моих клиентов - веб-хостинговая компания из UK (из Шотландии!) - хотел создать серверный модуль WHMCS для взаимодействия с Plesk.

Стандартный модуль Plesk для WHMCS использовал API вызовы напрямую к Plesk серверу. Но, несмотря на наличии опции для использования защищенного соединения с сервером, клиент хотел обезопасить себя еще сильнее, используя SSH туннель и Plesk CLI API (и отключить возможность обращаться к Plesk API напрямую).

Модуль должен был обладать следующими возможностями:

  • Подключаться к Plesk серверу через SSH.
  • Получать URL формы входа контрольной панели для конкретного домена (чтобы отображать его в контрольной панели WHMCS пользователям).
  • Создавать новые Plesk Customer и Reseller аккаунты (автоматически в определенных случаях).
  • Для хостинговых продуктов (“Customer” аккаунтов Plesk) – создавать и привязывать домен.
  • Инициировать сброс пароля (т.е. чтобы Plesk посылал пользователю email с инструкцией по сбросу пароля, если тот нажмет на соответствующую кнопку в WHMCS).

Модуль создавал новые аккаунты в Plesk когда "создавался" новый продукт. Это могло быть сразу после оформления заказа или поступления оплаты за него. Или после принятия заказа вручную менеджером в панели администратора WHMCS (в зависимости от настроек конкретного продукта).

Каждый раз, когда модуль должен быть что-то сделать с Plesk сервером, он сначался подключался к нему через SSH, и затем вызывал необходимые Plesk CLI API команды в shell.

Насколько я помню, клиент также назначил свой, специальный shell на сервере Plesk пользователю SSH, который разрешал исполнение только определенных команд Plesk API - таким образом, добавляя еще один слой безопасности в систему.

Я использовал SSH2 PECL для SSH соединений, и cURL для инициации сброса пароля.

Чтобы предотвратить shell иньекции в наименования продуктов и т.п., я использовал escapeshellarg функцию PHP для любого ввода, используемого в shell командах.

Этот проект был очень интересным, и я получил опыт и с WHMCS (с которым я уже работал и до этого, делая различные модули и аддоны, и дорабатывая чужие) и с Plesk API.