Настроить php через ssh
ssh2_connect
ssh2_connect — Подключение к SSH-серверу
Описание
Устанавливает соединение с сервером по SSH.
Список параметров
Параметр methods может быть ассоциативным массивом, содержащим до четырёх записей, перечисленных ниже.
Замечание: Метод шифрования » none » и MAC
Возвращаемые значения
Возвращает ресурс в случае успешного выполнения или false в случае возникновения ошибки.
Примеры
Пример #1 Пример ssh2_connect()
Откроем соединение, принудительно используя такие настройки: 3des-cbc при отправке пакетов, шифр aes любой силы при получении пакетов, без сжатия в обоих направлениях и обмен ключами Group1.
$callbacks = array( ‘disconnect’ => ‘my_ssh_disconnect’ );
Смотрите также
User Contributed Notes 7 notes
Be careful when providing a specific hostkey order.
This took me some time that you could save 😉
The following is an example of what works. Also by removing the ‘hex’ section all together, results in libssl (https://libssh2.org/) falling back to discovering which is the strongest cipher to authenticate with.
if (! function_exists ( «ssh2_connect» )) die( «function ssh2_connect doesn’t exist» );
$callbacks = array( ‘disconnect’ => ‘my_ssh_disconnect’ );
Hi,
If you are having problems with running a ssh2 session and it waits forever during the execution of stream_get_contents, it might be because the remote system has run the command and is now sitting at a # prompt waiting for the next command. I had this issue on a HP MSA box, here is the code to get around the issue.
// Wait give the terminal a chance to accept and start processing the command, this is a slow storage device after all
sleep ( 2 );
?>
You can’t use ssh2_exec with this method (well at lease I couldn’t) because on executing the first command the stream gets blocked and then you can’t run the exit command, whereas a terminal seems to use one session.
Простые примеры использования ssh
В статье собраны примеры использования ssh в работе web-разработчика. Каждая консольная команда, которая описана в статье, мне хотя бы один раз, но использовалась в реальных условиях. Возможно, я не правильный программист, но работать с консолью мне не нравится – это неудобно и сложно: нужно запоминать кучу разных команд, которые зачастую состоят всего из нескольких букв и ни каких ассоциаций не вызывают, поэтому и не запоминаются. Если у вас такие же чувства по отношению к консольным командам или вы только начинаете разбираться с ssh, то статья может быть полезна, в ней я собрал основные «фишки» для настройки и управления сервером, с которыми когда-либо сталкивался по работе.
Обновление операционной системы через ssh
Для обновления ОС, достаточно в консоле выполнить две команды:
Первая команда обновит данные о пакетах, а вторая выполнит обновление.
Работа с Apache через ssh
Команда для установки Apache:
Команда для запуска:
Команда для остановки:
Команда для перезапуска:
Включение модуля mod_rewrite:
Работа с PHP через ssh
Чтобы установить php на сервер можно выполнить команду:
Выполнить php скрипт:
Работа с MySql через ssh
Установка MySql на сервер:
Создать пароль для пользователя root:
Через консоль можно выполнять sql-запросы, только сначала нужно авторизоваться в Mysql:
Создание базы данных:
Создание пользователя для базы данных с локальными правами:
Создание пользователя с возможностью удаленного подключения:
Работа с планировщиком зада Cron через ssh
Установка Cron на сервер:
Для создания задачи, нужно отредактировать список задач:
Пример задачи на выполнение php-скрипта каждые 30 минут:
Для просмотра списка задач:
Работа с процессами через ssh
Для получения основных сведений о процессах, запущенных текущем пользователем:
Для получения основных сведений о процессах для всех пользователей:
Базовая информация о процессах для текущего пользователя:
Поиск процесса по куску имени:
Управление SFTP-пользователями через ssh
Создание нового пользователя SFTP:
Удаление пользователя SFTP:
Создание нового пользователя SFTP с правами root`а:
Создание «домашней» папки для пользователя:
Работа с архивами через ssh
Распаковать архив в текущую папку:
Распаковать архив в конкретную папку:
Настройка прав на файлы и папки через ssh
Задать права на файл:
Подробней про права на файлы и папки можно почитать тут: википедия.
Установка и настройка Memcached через ssh
После установки нужно настроить конфиг:
После настройки конфига, нужно перезапустить Memcached:
Далее необходимо установить и настроить модули для php:
Работа с редактором vim
Для перехода в режим редактирования нужно нажать insert или i.
Выхода из режима редактирования — нажать ESC.
Сохранения изменений: выйти из режима редактирования и ввести команду :wq
Выхода без сохранения — ввести команду :q!
Место на жестком диске сервера
Узнать место на жестком диске: полный объем/занято/свободно:
В гигабайтах:
Назначение владельца на файлы и папки
Перед выполнением команды, необходимо войти в родительскую папку:
Чтобы задать владельца www-data для папки public_html и всех вложенных в нее подпапок:
Чтобы задать владельца www-data для всех файлов внутри папки public_html:
Создание пользователя базы данных и саму БД PostgreSQL
Вход в psql под пользователем postgres(это аналог root для PostgreSQL):
И теперь можно выполнить sql запросы для создания пользователя и самой базы данных:
Настройка отладки php-кода при помощи Xdebug
Классические методы отладки на PHP — использование функций error_log, print_r и var_dump. Их проблема в том, что они не помогают отслеживать сам процесс работы кода. Однако с этой задачей справляется Xdebug — один из самых популярных инструментов среди PHP-разработчиков, которые хотят работать, а не страдать.
В этой статье будет рассмотрена отладка PHP с помощью связки Xdebug и VSCode. Если вы пользуетесь PHPStorm, то проблем тоже не будет — настройка выполняется даже проще и быстрее.
Возможности Xdebug
Xdebug — это расширение для PHP, которое позволяет использовать удаленный отладчик в IDE через брейк-пойнты. С его помощью вы можете отслеживать значения переменных. Как итог — ошибки в коде обнаруживаются быстрее, чем при использовании error_log, print_r и var_dump.
Еще одна полезная функция — трассировка стека. Она выводит подробный путь, который привел приложение к ошибке. Он содержит параметры, переданные в функцию. Xdebug также можно использовать как профайлер для поиска узких мест кода. Если добавить внешние инструменты, то получится визуализировать графики производительности. Например, можно использовать WebGrind — набор PHP-скриптов для удобного вывода статистики прямо в браузере.
Кроме того, с помощью Xdebug вы можете проследить, какая часть кода выполняется в процессе запроса. Это дает информацию о том, как хорошо код покрыт тестами.
Подключение Xdebug
Для работы Xdebug PHP должен быть в режиме CGI. Посмотрим на примере хостинга Timeweb, как его включить.
Подключаемся к серверу через SSH. Можно использовать консоль в панели управления Timeweb.
Переходим в папку cd-bin сайта:
Создаем символическую ссылку командой:
Остаемся в директории cgi-bin и копируем файл php.ini:
Теперь мы можем управлять параметрами PHP директивами в файле php.ini. Он находится в папке cgi-bin. Открываем его и вставляем в конце следующие строки:
Если указанный порт занят, укажите другой. Можно использовать стандартный для Xdebug — 9000. В качестве idekey я указал VSCODE. Если будете настраивать конфигурацию для PHPStorm, впишите его.
Чтобы проверить, работает ли Xdebug, создадим в корне сайта файл Myfile.php со следующим содержимым:
Открываем файл в браузере и проверяем, что все параметры указаны верно.
Организация удаленного подключения
Чтобы выполнять PHP Debug на локальной машине, нужно настроить связь IDE и сервера через SSH-туннель.
На Linux все выполняется парой команд.
Приватный ключ сохраняется на локальной машине, а публичный добавляется на сервер. Подробнее об этом, а также о настройке SSH на Windows, вы можете узнать из этой статьи.
На Linux туннель создается командой:
На Windows туннель настраивается через утилиту PuTTY.
Сессия сохранится под тем именем, которое мы указали в разделе Session. В дальнейшем нужно будет просто запускать ее заново.
Настройка VSCode
Чтобы работать с Xdebug в VSCode, установим два расширения: Sync-Rsync и PHP Debug. Первое нужно для работы с удаленным сервером, второе — для отладки скриптов.
После установки расширений создаем на локальной машине пустую папку и открываем ее через VSCode: «Файл» — «Открыть папку».
Путь /home/user/.ssh/id_rsa — это место, где лежит файл с закрытой частью SSH-ключа.
После сохранения файла settings.json нажимаем в VSCode F1, выполняем команду Sync Remote to Local. В локальную папку, указанную в настройках, скопируются все файлы с сервера.
На этом настройка IDE завершена. Можно приступать к тестированию кода.
Debug кода
Мы настроили среду, теперь разберемся, как пользоваться Xdebug.
Переходим в режим «Отладка» и проверяем, что выделен пункт Listen for XDebug. Нажимаем на зеленый треугольник или на клавишу F5.
После перезагрузки сайта в браузере возвращаемся в VSCode. В отладчике должны отобразиться глобальные переменные и их значения на момент обработки кода в брейк-пойнте. Вы можете перемещаться по коду, отслеживая изменение переменных на каждом шаге.
Профилирование с визуализацией результатов
Чтобы использовать Xdebug profiler на полную мощность, установим WebGrind. Это набор скриптов, который выводит статистику в браузере. С его помощью можно посмотреть список вызванных функций, количество вызовов, общее затраченное время на вызов и выполнение.
Затем нужно открыть файл config.php, который находится в распакованной папке webgrind-master. В нем отредактируем две строки:
После такой настройки можно выполнять на Xdebug профилирование. Открываем наш тестовый скрипт в браузере. Затем переходим по ссылке www.domain/webgrind-master. В выпадающем списке выбираем только что запущенный скрипт и нажимаем на кнопку Update.
Функции можно скрывать или раскрывать, чтобы посмотреть развернутую статистику. Инструмент также умеет отображать графы вызова функций — для этого используется режим Show Call Graph.
Вывод: когда использовать Xdebug?
Xdebug существенно упрощает отладку PHP-кода. Конечно, если ваш текущий инструментарий удовлетворяет все потребности в поиске багов, то устанавливать дополнительное расширение смысла нет. Но, как показывает практика, без Xdebug сложно провести правильное модульное тестирование или отладку через удаленные брейк-пойнты с возможностью пошаговой проверки кода.
Функции SSH2
Содержание
User Contributed Notes 8 notes
you will have an issue transferring any file using ssh2_scp_send unless you send a dummy file after your real file, or preferably issue an
ssh2_exec ($connection, ‘exit’);
I was transferring hundreds of thousands of files in my prototype across multiple servers, and noticed that each file had a mismatched md5 hash and bytelength.
after a bit of research i learnt that this was a bug, and added the code above as suggested at pecl.php.net in the bugs section.
hopefully this helps someone who is getting partial file transfer that could ruin your whole app.
I was building out the ssh2 extension (0.10) under OpenBSD 3.9 on sparc64 and I got this error when running configure:
(The error message above is misleading because the problem is not with libssh2.)
Getting strange «Unable to open ssh2.sftp://Resource id #3/example.txt» errors? This is a bug in PHP > 5.6.27. Use intval() as a workaround to make ssh2 work again:
Installing on HPUX 11.11 cookbook
Just follow the install instructions on the man page and solved the problems as they appear
-when executing phpize
Problems with aclocal, autom4ke and m4
Installed automake, autoconf and m4
To list directory contents:
(thanks to Sara for assisting)
Trying to compile this ssh PECL extension for Mac OS X (10.4.2)
with entropy.ch’s php5 distribution? Read on: PART 2:
Good luck. hope that saves you my headache! 🙂
(Continued in a PART 2 comment)
It turns out that it’s an Apache problem. Even though I was given an error message when starting it, it still worked perfectly from the CLI. So, I commented it out in the
INI file again, and am just loading it using extension_loaded(‘ssh2’) and dl(‘php_ssh2.dll’) from within the script.
Как подключиться к MySQL через SSH-туннель
По умолчанию сервер MySQL прослушивает только localhost, что означает, что к нему могут получить доступ только приложения, работающие на том же хосте.
Более безопасной альтернативой было бы создание SSH-туннеля от локальной системы к серверу. SSH-туннелирование — это метод создания зашифрованного SSH-соединения между клиентом и сервером, через которое могут ретранслироваться порты служб.
В этом руководстве мы объясним, как создать туннель SSH и подключиться к серверу MySQL с удаленных клиентов. Те же инструкции применимы и для MariaDB.
Подготовка
Создайте SSH-туннель в Linux и macOS
Клиент ssh предустановлен в большинстве систем на базе Linux и Unix.
Если вы используете Linux или macOS в качестве операционной системы, вы можете создать туннель SSH, используя следующую команду:
Используются следующие параметры:
После запуска команды вам будет предложено ввести пароль пользователя SSH. После его ввода вы войдете на сервер, и туннель SSH будет установлен. Рекомендуется настроить аутентификацию на основе ключей SSH и подключаться к серверу без ввода пароля.
Теперь вы можете указать клиенту MySQL на локальном компьютере адрес 127.0.0.1:3336 ввести учетные данные для входа в удаленную базу данных и получить доступ к серверу MySQL.
Например, чтобы подключиться к серверу MySQL с помощью клиента mysql из командной строки, вы должны ввести:
Где MYSQL_USER — это удаленный пользователь MySQL, имеющий права доступа к базе данных.
При появлении запроса введите пароль пользователя MySQL.
Чтобы завершить туннель SSH, введите CTRL+C в консоли, на которой работает клиент ssh.
Создайте туннель SSH в Windows
Выполните следующие шаги, чтобы создать SSH-туннель к серверу MySQL с помощью PuTTY:
Запустите Putty и введите IP-адрес сервера в поле Host name (or IP address) :
Вернитесь на страницу Session чтобы сохранить настройки, чтобы не вводить их снова.
Появится новое окно с запросом вашего имени пользователя и пароля. После ввода имени пользователя и пароля вы войдете на сервер и создадите туннель SSH.
Настройка аутентификации с открытым ключом позволит вам подключаться к серверу без ввода пароля.
Теперь вы можете подключиться к удаленной базе данных с помощью локального клиента MySQL.
Например, если вы используете HeidiSQL, введите 127.0.0.1 в поле Hostname / IP а имя пользователя и пароль MySQL в поля User и Password :
Выводы
MySQL, самый популярный сервер баз данных с открытым исходным кодом, прослушивает входящие соединения только на localhost. Создание SSH-туннеля позволяет вам безопасно подключаться к удаленному серверу MySQL с вашего локального клиента.
Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.









