Cover Image for Ошибки обновления файлов сайта и настройка доступов через FTP/SFTP (FS_METHOD) в WordPress

Ошибки обновления файлов сайта и настройка доступов через 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 без шифрования
ftpsocketsFTP через сокетыРезервный вариант, если 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:22
  • Connection 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, повреждённые архивы обновлений.