Ошибки обновления файлов сайта и настройка доступов через FTP/SFTP (FS_METHOD) в WordPress
23 апреля 2026
Константа FS_METHOD позволяет указать, как WordPress должен работать с файловой системой. Это помогает решать проблему обновления файлов, плагинов и тем как из консоли, так и через FTP/SFTP.
Что такое FS_METHOD и зачем он нужен
FS_METHOD — это PHP-константа WordPress, которая определяет метод доступа к файловой системе. Она отвечает за то, как WordPress будет записывать файлы при обновлении плагинов, тем и ядра.
Проблема: Стандартный способ обновления требует ввода FTP-данных каждый раз, что неудобно и небезопасно.
Решение: Указать FS_METHOD в wp-config.php, чтобы WordPress использовал нужный способ доступа автоматически.
Доступные методы
| Метод | Описание | Когда использовать |
|---|---|---|
direct | Прямой доступ к файлам через PHP | Сервер работает от имени владельца файлов (например, PHP-FPM под нужным пользователем) |
ssh2 | Доступ через SSH2 | Настроен SSH-доступ с ключами, безопасное решение для production |
ftpext | Расширение FTP для PHP | Устаревший метод, FTP без шифрования |
ftpsockets | FTP через сокеты | Резервный вариант, если ftpext недоступен |
Установка FS_METHOD в wp-config.php
Добавьте одну из строк до комментария /* That's all, stop editing! */:
// Прямой доступ (самый простой вариант)
define( 'FS_METHOD', 'direct' );
// SSH2 (безопасный вариант)
define( 'FS_METHOD', 'ssh2' );
// FTP расширение (устаревшее)
define( 'FS_METHOD', 'ftpext' );
// FTP через сокеты (резервный)
define( 'FS_METHOD', 'ftpsockets' );
Пошаговая инструкция по настройке SSH2
SSH2 — наиболее безопасный способ, особенно для production-серверов.
1. Установка PHP-расширения SSH2
Ubuntu/Debian:
sudo apt-get install php-ssh2
sudo systemctl restart apache2 # или php-fpm
CentOS/RHEL:
sudo yum install php-pecl-ssh2
sudo systemctl restart httpd
Проверка установки:
php -m | grep ssh2
2. Настройка SSH-ключей
Создайте пару ключей для WordPress:
# Перейдите в директорию пользователя веб-сервера
cd /var/www
# Сгенерируйте ключ (без пароля)
sudo -u www-data ssh-keygen -t rsa -b 4096 -f /var/www/.ssh/wp_rsa -N ""
# Установите правильные права
sudo chmod 700 /var/www/.ssh
sudo chmod 600 /var/www/.ssh/wp_rsa
sudo chmod 644 /var/www/.ssh/wp_rsa.pub
3. Авторизация ключа на сервере
Если WordPress и SSH на одном сервере:
# Добавьте публичный ключ в authorized_keys
sudo cat /var/www/.ssh/wp_rsa.pub | sudo tee -a /var/www/.ssh/authorized_keys
sudo chmod 600 /var/www/.ssh/authorized_keys
4. Настройка wp-config.php для SSH2
define( 'FS_METHOD', 'ssh2' );
define( 'FTP_BASE', '/var/www/html/' ); // Корневая директория WordPress
define( 'FTP_CONTENT_DIR', '/var/www/html/wp-content/' );
define( 'FTP_PLUGIN_DIR', '/var/www/html/wp-content/plugins/' );
define( 'FTP_THEMES_DIR', '/var/www/html/wp-content/themes/' );
define( 'FTP_USER', 'www-data' ); // Пользователь SSH
define( 'FTP_HOST', 'localhost:22' ); // Хост и порт SSH
define( 'FTP_PUBKEY', '/var/www/.ssh/wp_rsa.pub' ); // Публичный ключ
define( 'FTP_PRIKEY', '/var/www/.ssh/wp_rsa' ); // Приватный ключ
// FTP_PASS оставляем пустым — используем ключи
define( 'FTP_PASS', '' );
Примеры кода для wp-config.php
Минимальная настройка (direct)
<?php
// ... остальная часть wp-config.php
define( 'FS_METHOD', 'direct' );
/* That's all, stop editing! Happy publishing. */
Важно: Для работы
directнужно, чтобы пользователь веб-сервера (например,www-data) был владельцем файлов WordPress.
Полная настройка SSH2
<?php
// ... остальная часть wp-config.php
// Метод доступа к файловой системе
define( 'FS_METHOD', 'ssh2' );
// SSH-параметры
define( 'FTP_USER', 'www-data' );
define( 'FTP_HOST', 'localhost:22' );
define( 'FTP_PUBKEY', '/var/www/.ssh/wp_rsa.pub' );
define( 'FTP_PRIKEY', '/var/www/.ssh/wp_rsa' );
define( 'FTP_PASS', '' );
// Пути (обычно определяются автоматически, но можно переопределить)
define( 'FTP_BASE', '/var/www/html/' );
define( 'FTP_CONTENT_DIR', '/var/www/html/wp-content/' );
define( 'FTP_PLUGIN_DIR', '/var/www/html/wp-content/plugins/' );
define( 'FTP_THEMES_DIR', '/var/www/html/wp-content/themes/' );
/* That's all, stop editing! Happy publishing. */
Настройка с FTP (не рекомендуется)
<?php
define( 'FS_METHOD', 'ftpext' );
define( 'FTP_USER', 'username' );
define( 'FTP_PASS', 'password' );
define( 'FTP_HOST', 'ftp.example.com:21' );
define( 'FTP_SSL', false ); // true для FTPS
Важные нюансы и ограничения
Безопасность
- SSH2 — предпочтительный метод для production. Использует шифрование и ключи вместо паролей.
- Direct — удобен, но требует правильной настройки прав доступа к файлам.
- FTP — передаёт данные в открытом виде, избегайте в production.
Права доступа
Для метода direct:
# Установите владельца файлов
sudo chown -R www-data:www-data /var/www/html/
# Права на файлы и директории
sudo find /var/www/html/ -type f -exec chmod 644 {} \\;
sudo find /var/www/html/ -type d -exec chmod 755 {} \\;
Облачный хостинг
На managed-хостингах (Cloudways, Kinsta, WP Engine) метод direct обычно уже настроен. SSH2 может быть недоступен или требовать специальной конфигурации у провайдера.
Docker-окружение
В контейнерах обычно используется direct с правильным USER в Dockerfile:
FROM wordpress:latest
# Убедитесь, что www-data владеет файлами
RUN chown -R www-data:www-data /var/www/html
Типовая Проблематика
Ниже — типовые симптомы, ошибки и сообщения, которые часто решаются настройкой FS_METHOD (обычно direct или ssh2) и корректными правами/владельцем файлов.
1) WordPress постоянно запрашивает FTP / Connection Information
Чаще всего проявляется при:
- обновлении плагинов, тем и ядра
- установке/удалении плагинов и тем
- автообновлениях
Как выглядит:
- экран с формой “Connection Information” (хост, логин, пароль)
- сообщения уровня “WordPress asking for FTP credentials”
2) Installation failed: Could not create directory
Ошибка при установке/обновлении плагина или темы, когда WordPress не может создать временные/целевые директории.
Частые варианты текста:
Installation failed: Could not create directory.Installation failed. Could not create directory …/wp-content/upgrade/
3) Permission denied при распаковке или копировании файлов обновления
Когда WordPress начал обновление, но не может записать/заменить файлы.
Примеры:
Warning: copy(...): failed to open stream: Permission denied- “The update cannot be installed because we will be unable to copy some files. This is usually due to inconsistent file permissions.”
4) Could not copy file / Could not write file
Схожая группа ошибок, когда процесс обновления дошёл до копирования, но запись в директории запрещена.
Примеры:
Installation failed: Could not copy the file.Could not copy ...
5) Ошибки при удалении плагина/темы из админки
Удаление тоже использует файловую подсистему.
Пример:
Plugin could not be deleted due to an error: Could not fully remove the plugin(s) ...
6) “Unable to connect to the filesystem” / проблемы с SSH2 (если выбран ssh2)
Это отдельный класс ошибок: метод ssh2 включён, но SSH/SFTP не настроен или недоступен.
Примеры формулировок:
- “Unable to connect to the filesystem.”
- “SSH2 not working / won’t accept keys”
Failed to connect to SSH2 Server 127.0.0.1:22Connection refused- “The ssh2 PHP extension is not available”
7) Не создаются временные каталоги обновления в wp-content
Иногда ошибка выглядит как невозможность создать wp-content/upgrade или записать туда файлы обновления.
Практически всегда сводится к правам/владельцу wp-content и способу доступа (direct/ssh2).
Важно:
FS_METHODи правами доступа вы решаете проблемы доступа WordPress к файловой системе. Если реальная причина в другом (например, битый архив, лимиты памяти, WAF/ModSecurity, заполнен диск), то симптомы могут быть похожими, но фикс будет другой.
Резюме
- Если WordPress при обновлениях запрашивает FTP/SFTP или выдаёт ошибки прав доступа, чаще всего причина в недостаточных правах на запись в директории проекта.
- Для автоматических обновлений укажите
FS_METHODвwp-config.php: обычноdirect(при корректных владельце и правах) илиssh2(более безопасный вариант для production). - Для
directубедитесь, что пользователь веб-сервера владеет файлами WordPress и выставлены корректные права. - Для
ssh2установите PHP-расширениеssh2, настройте ключи и пропишите параметрыFTP_*вwp-config.php. - Если после настройки проблема остаётся, проверьте смежные причины: заполнение диска, ограничения памяти, WAF/ModSecurity, повреждённые архивы обновлений.


