Могу ли я установить / обновить плагины WordPress без предоставления доступа по FTP?


565

Я использую WordPress на своем живом сервере, который использует только SFTP с использованием ключа SSH .

Я хочу установить и обновить плагины, но, похоже, вам необходимо ввести свой FTP-логин для установки плагинов. Есть ли способ установить и обновить плагины, загрузив файлы вручную вместо того, чтобы WordPress обрабатывал весь процесс?


3
Да, ты можешь. Просто используйте cPanel или любой другой инструмент для загрузки файлов, который у вас есть; загрузите zip-плагин и извлеките его wp-content/plugins/из wp dashboard, затем перейдите на вкладку plugins и включите его.
WPDev

При использовании VPS, следует попробовать это: stackoverflow.com/a/44137965/3160597
azerafati

@WPDev Если бы ваш комментарий был указан в качестве ответа, я бы повторил его еще раз, это было бы самым полезным.
Tensigh

Ответы:


772

WordPress будет запрашивать информацию о вашем FTP-соединении только при попытке установить плагины или обновление WordPress, если он не может писать /wp-contentнапрямую. В противном случае, если ваш веб-сервер имеет доступ для записи необходимых файлов, он автоматически позаботится об обновлениях и установке. Этот метод не требует наличия доступа к FTP / SFTP или SSH, но требует наличия определенных прав доступа к файлам на вашем веб-сервере.

Он будет пробовать различные методы по порядку и использовать FTP, если методы Direct и SSH недоступны.

https://github.com/WordPress/WordPress/blob/4.2.2/wp-admin/includes/file.php#L912

WordPress попытается записать временный файл в ваш /wp-contentкаталог. Если это удастся, он сравнивает владение файлом с его собственным uid, и, если есть совпадение, он позволит вам использовать «прямой» метод установки плагинов, тем или обновлений.

Теперь, если по какой-то причине вы не хотите полагаться на автоматическую проверку, какой метод файловой системы использовать, вы можете определить константу 'FS_METHOD'в вашем wp-config.phpфайле, то есть любую, 'direct', 'ssh', 'ftpext' or 'ftpsockets'и он будет использовать этот метод. Помните, что если вы установите для этого параметра значение «direct», но ваш веб-пользователь (имя пользователя, под которым работает ваш веб-сервер) не имеет надлежащих разрешений на запись, вы получите сообщение об ошибке.

Итак, если вы не хотите (или не можете) изменять разрешения для wp-контента, чтобы ваш веб-сервер имел права на запись, добавьте это в файл wp-config.php:

define('FS_METHOD', 'direct');

Разрешения объяснены здесь:


30
Мне нужно было сделать: sudo chown -R www-data wp-content, а также предоставить права на запись
mikermcneil

5
Использование getmyuidстроки 876 здесь, возможно, некорректно, так как она возвращает UID владельца скрипта, а не исполнителя скрипта. Я верю, что так и должно быть posix_getuid.
cmbuckley

7
Каковы последствия этого подхода для безопасности?
Джахмик

1
Если вы хотите увидеть, под каким пользователем работает php, вы можете использовать это: print_r(posix_getpwuid(posix_geteuid())); Вы можете добавить код в wp-configфайл.
Иван В.

3
chown -R www-data wordpress/wp-contentне работал для меня, но chown -R www-data wordpressсделал
Мартин

252

Как уже говорилось, ни одно из пермских исправлений больше не работает. Вам необходимо соответствующим образом изменить ПЕРЕДАЧУ и указать следующее wp-config.php:

define('FS_METHOD', 'direct');

11
Несмотря на то, что у меня были правильные разрешения, чтобы веб-сервер мог выполнять запись в каталог плагинов и каталог wp-content, этот параметр исправил его, поэтому администратор не запрашивал параметры FTP / SFTP для обновления плагинов. Спасибо. Работал отлично.
Шон МакКлири

7
Я должен был явно сделать это также.
julien_c

5
Когда они сделали это требованием?
danjp

Я также должен был положиться на этот параметр на WP, установленном пакетом debian в Ubuntu 12.04. В противном случае разрешения были в порядке, у wp-content есть разрешение rwx для группы www-данных ...
alci

2
Следите за тем, чтобы убедиться, что в файле wp-config.php отсутствует следующее: define ('FS_METHOD', 'ftpext'); В этом случае определение размещения ('FS_METHOD', 'direct'); в нижней части файла не будет работать. Вам придется стереть или закомментировать определение ('FS_METHOD', 'ftpext'); Это может быть особенно вероятно, если вы мигрировали с другого сервера, который требует FTP.
Дуг

104

Просто хотел добавить, что вы НИКОГДА не должны устанавливать wp-contentразрешение или разрешение для любой папки 777.

Вот что я должен был сделать, чтобы:

1) Я установил владение папкой wordpress (рекурсивно) для пользователя apache, например, так:

# chown -R apache wordpress/

2) Я изменил групповое владение папкой wordpress (рекурсивно) на группу apache, вот так:

# chgrp -R apache wordpress/

3) предоставить владельцу полную привилегию для каталога, например так:

# chmod u+wrx wordpress/*

И это сделало работу. Моя wp-contentпапка имеет 755разрешения, кстати.

TL; версия DR:

# chown -R apache:apache wordpress
# chmod u+wrx wordpress/*

11
установка вашего wordpress как принадлежащего apache так же плоха, как установка 777. Результат тот же: любой скрипт php теперь может изменять ваши файлы wordpress. Наилучший вариант - выбрать apache: временно установить apache, установить обновления и вернуться к исходному ИЛИ использовать трюк ssh / ftp
woens

11
Я не согласен. Это не совсем то же самое, что и установка 777. Любой пользователь на машине будет иметь право на запись, если вы установите разрешения на 777. Это само по себе проблема. и хотя вы правы, этот apache теперь может изменять файлы php, это было бы намерением в первую очередь (для обновления или установки чего-либо). Если кому-то удастся поместить вредоносные php-файлы на сервер, это будет совершенно новая проблема, и столкновение с разными пользователями мало что поможет.
Sufinawaz

2
Спасибо, это тоже спасло мой день, так как у меня нет привилегий FTP, а есть только root-доступ.
Шаси Кант

4
Это единственный, кто мне помог! Большое спасибо, после многих лет разработки сайтов Wordpress, это все еще классическая проблема!
acidghost

1
Если вы работаете с WordPress в необычной сборке, вставьте это в файл PHP, чтобы проверить, под кем работает Apache (например, ubuntu - это www-data): <? Php echo exec ('whoami'); ?>
Императив

70
  1. В wp-config.phpдобавленииdefine('FS_METHOD', 'direct');
  2. Сделайте сервер доступным для записи каталогов wp-content/, wp-content/plugins/.
  3. Установите плагин (скопируйте каталог dir в wp-content/pluginsкаталог).

Работал на версии 3.2.1


4
Работал и на версии 4.0.
Meetai.com

1
Вы должны добавить эту опцию, но вам нужно только изменить разрешение на wp-контент / плагины
Джон Клоян,

Это явно шаги, которые вы должны предпринять, чтобы установить плагин без запроса информации FTP. Вы можете предпринять шаги, чтобы укрепить WordPress с разрешениями, а затем внести эти 2 изменения, и вы должны оставаться в основном в безопасности.
Боздоз

51

откройте wp-config.phpфайл и добавьте следующую строку:

define('FS_METHOD', 'direct');

это работает для меня ... Спасибо


Также работает (и кажется обязательным) в версии 5.4 с июня 2020 года.
Ральф Хейн

34

Просто быстрое изменение в wp-config.php

define('FS_METHOD','direct');

Вот и все, наслаждайтесь вашими обновлениями WordPress без FTP !

Альтернативный метод:

Существуют хосты, которые не позволят этому методу работать, чтобы упростить обновление WordPress. К счастью, есть еще один способ, чтобы этот вредитель не запрашивал у вас имя пользователя и пароль для FTP.

Опять же, после объявления логина MYSQL в вашем файле wp-config.php, добавьте следующее:

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

22

Чтобы включить использование SSH2 для обновлений и загрузки тем, вам необходимо сгенерировать ключи SSH и установить модуль PHP SSH. Затем WordPress обнаружит, что у вас есть доступный SSH2, и вы увидите другую опцию (SSH2), отображаемую при загрузке / обновлении.

1.) Убедитесь, что у вас установлен модуль PHP для Debian:

sudo apt-get install libssh2-php

2.) Генерация ключей SSH, добавление ключевой фразы необязательно:

ssh-keygen
cd  ~/.ssh
cp id_rsa.pub authorized_keys

3.) Измените разрешение, чтобы WordPress мог получить доступ к этим ключам:

cd ~
chmod 755 .ssh
chmod 644 .ssh/*

Теперь вы получите опцию SSH2 при выполнении загрузки / обновления / плагина. WP SSH соединение

4.) Для большей простоты вы можете установить значения по умолчанию в вашем, wp-config.phpи это будет предварительно заполнять учетные данные SSH в окне загрузки WordPress.

define('FTP_PUBKEY','/home/<user>/.ssh/id_rsa.pub');
define('FTP_PRIKEY','/home/<user>/.ssh/id_rsa');
define('FTP_USER','<user>');
define('FTP_PASS','passphrase');
define('FTP_HOST','domain.com');

«Пароль» необязателен, если вы не настроили пароль во время ssh-kengen; тогда не добавляйте это вwp-config.php

Это решило мою проблему. И я не должен был делать это chownвообще. Но я видел этот метод в других местах.

Ссылки:


я не эксперт по безопасности, и я понимаю, что WordPress включил эту возможность и подумал, что все в порядке .... но я не чувствую себя хорошо по этому поводу ... 1. иметь учетную запись ssh без пароля, (любой, кто когда-либо получал После этого закрытый ключ может удаленно войти в систему в любое время, когда они захотят, без пароля) и 2. имея пароль в виде открытого текста (см. 1). это напоминает мне rsh, в зависимости от идеи, что «никто не будет иметь доступа к моим локальным файлам» для защиты сетевого пароля к системе.
Дон Яркий

Я уверен, что вы можете сгенерировать парольную фразу и НЕ добавлять ее в wp-config.php, тогда вам просто нужно будет ввести ее, когда вы попадете в диалоговое окно Информация о соединении.
JacquelineIO

Использовать незашифрованный закрытый ключ таким способом - огромная дыра в безопасности. Но вы можете смягчить проблему, добавив "from = what" к соответствующей строке в authorized_keys.
Маркхан

Это замечательно, но, похоже, есть несовместимость с php7: core.trac.wordpress.org/ticket/35517
Supaiku

21

Обычно вы можете просто загрузить свой плагин в wp-content\pluginsкаталог. Если у вас нет доступа к этому каталогу через SFTP, боюсь, вы застряли.


Да, просто добавьте их в wp-content / plugins.
ceejayoz

17

Вы можете получить это очень легко, набрав следующую команду в командной строке

sudo chown -R www-data:www-data your_folder_name

или скопируйте и вставьте следующий код в файл wp-config.php.

define('FS_METHOD', 'direct');

Где «your_folder_name» - это папка, в которой установлен ваш WordPress внутри этой папки.


16

Выполните следующий код в терминале

sudo chown -R www-data /var/www

Для получения дополнительной информации посетите Wordpress на Ubuntu установить плагины без доступа по FTP


4
Не очень хорошая идея предоставлять доступ к www-данным ко всему в вашем веб-каталоге
WoodyDRN

вариант, который работал для меня:sudo chown -R www-data /var/www/html
Жюль Колле

15

Добавьте следующий код в wp-config

define('FS_METHOD', 'direct');

FS_METHOD вызывает метод файловой системы. Это должно быть только direct, ssh2, ftpext или ftpsockets. Как правило, вы должны изменить это, только если у вас возникли проблемы с обновлением. Если вы измените его, и это не поможет, измените его обратно / удалите. В большинстве случаев установка его в «ftpsockets» будет работать, если не выбран автоматически выбранный метод.

(Первичное предпочтение) «direct» вынуждает его использовать запросы прямого файлового ввода-вывода изнутри PHP, это чревато открытием проблем безопасности на плохо настроенных хостах. Это выбирается автоматически при необходимости.

(Вторичное предпочтение) «ssh2» - принудительно использовать расширение SSH PHP, если оно установлено

(3-е предпочтение) «ftpext» - заставить PHP-расширение FTP использовать FTP-доступ и, наконец,

(4-е предпочтение) "ftpsockets" использует класс PHP Sockets для доступа по FTP

Для получения дополнительной информации посетите: http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants


15

Если вы работаете в Ubuntu , быстрое решение, которое помогло мне, - передать право собственности пользователю Apache (по умолчанию www-data):

cd your_wordpress_directory
sudo chown -R www-data wp-content
sudo chmod -R 755 wp-content

2
Не давайте разрешения на выполнение файлам, которые ему не нужны.
Бурхан Али

13

Изменить с php_modна fastcgiс cgiи SuEXECвключен. Работает для меня.

Если не работает, попробуйте изменить , wp-contentчтобы 775в корне:

chmod -R 775 ./wp-content

Добавить к wp-config.php:

define('FS_METHOD', 'direct');

надеюсь это работает


12

WordPress 2.7 позволяет загружать zip-файлы напрямую (в нижней части страницы плагинов есть ссылка) - доступ по FTP не требуется. Это новая функция в 2.7, и она работает только для плагинов (пока не для тем).


Кстати, обновление еще проще - вы увидите значок, указывающий, что доступна новая версия, и вы нажмете «обновить» и дайте ему сделать свое дело. Очень хорошо. Даже ядро ​​WordPress обновляется таким образом - я перешел с 2.7 на 2.7.1 без загрузки чего-либо.
Д. Ламберт

Это верно только в том случае, если у вас установлены права доступа к файлам, чтобы веб-сервер / пользователь PHP мог писать в них. Если нет, вам будет предложено ввести учетные данные FTP / SFTP. Смотрите ответ Stereointeractive.com.
Дейв Форгак

9

Воскрешение старого потока, но есть фантастический новый плагин под названием SSH SFTP Updater Support, который добавляет возможности SFTP без необходимости редактировать ваш wp-config.phpфайл. Кроме того, реализация SFTP в Wordpress опирается на некоторые неясные модули PHP, которые часто не включены на серверах; Этот плагин упаковывает другой плагин PHP SFTP, поэтому вам не нужно ничего настраивать на стороне Apache.

Я столкнулся с множеством проблем при получении поддержки SFTP - этот плагин решил все из них и просто фантастический.


9

Попробуй это

1) В wp-config.phpдополненииdefine('FS_METHOD', 'direct');

2) Установите wp-contentкаталог 777для записи.

3) Теперь установите плагин.


6
Привет Мохан, спасибо огромное за опцию FS_METHOD. Это действительно то, что я искал. Мне нужно сказать следующее: ни одному каталогу не нужен каждый 777, если только обстоятельства не являются исключительными. Это делает каталог доступным для чтения, записи и выполнения. Это огромный риск для безопасности. Правильное решение - узнать, кто ваш пользователь Apache (www-data, _www или аналогичный). Этому пользователю необходим доступ для чтения и записи к wp-контенту или право владения этим каталогом («sudo chown www-data wp-content»), нет прав на выполнение. Извините, что немного тупой, но 777 опасен для веб-контента.
Рубен

8
Не загружайте каталог 777, это небезопасно и не должно быть ответом!
MKN Web Solutions

8

Ответ от стереоинтерактивного охватывает все варианты. Просто хотел упомянуть альтернативный способ использования FTP. Я предполагаю, что причина, по которой вы не разрешаете доступ по FTP, заключается в безопасности. Одним из способов решения этих проблем безопасности является запуск прослушивания вашего FTP-сервера только на 127.0.0.1.

Это позволяет вам использовать FTP изнутри WordPress, и вы сможете устанавливать плагины, не раскрывая его остальному миру. Это также может быть применено к другим популярным веб-приложениям, таким как Joomla! и Drupal. Это то, что мы делаем с нашими устройствами BitNami и облачными серверами, и работает довольно хорошо.


8

Я также рекомендую плагин SSH SFTP Updater Support . Просто решил все мои проблемы тоже ... особенно в отношении получения плагинов для удаления через администратор. Просто установите его обычным способом, и в следующий раз, когда WordPress предложит вам указать детали FTP, появятся дополнительные поля для копирования / вставки вашего личного ключа SSH или загрузки файла PEM.

Единственная проблема, которую я имею, состоит в том, чтобы заставить это запомнить ключ (попробовал оба метода). Мне не нравится идея найти и вводить его каждый раз, когда мне нужно удалить плагин. Но, по крайней мере, сейчас это серьезное исправление.


1
«для вас будут дополнительные поля для копирования / вставки вашего личного ключа SSH» .... я не гений безопасности, но ... не весь смысл личных ключей ssh ​​в том, что вам никогда не придется отправлять их по сети ?
Дон Яркий

8

Да, прямо установить плагин в WordPress.

  1. Скопируйте папку плагина и вставьте в папку плагина WordPress.
  2. перейдите на сторону администратора (/ test / wp-admin), затем перейдите по ссылке на плагин и проверьте название плагина.
  3. Активируйте плагин, чтобы легко установить плагин.

другой вариант

  1. создайте zip-файл для кода плагина.
  2. перейдите на сторону администратора (/ test / wp-admin), затем перейдите по ссылке на плагин, затем нажмите на добавление нового, затем просмотрите папку плагина zip и установите плагин, затем выберите опцию активировать плагин, так что активируйте плагин и активировать плагин.

6

Можно использовать SFTP или SSH для автоматического обновления плагинов в WordPress, но вам нужно иметь расширение ssh2 pecl. Вы можете узнать, как это сделать, используя следующий учебник


6

Мы используем SFTP с SSH (как на наших серверах разработки, так и на живых серверах), и я попытался (хотя и не слишком сильно) использовать функцию загрузки WordPress. Я согласен с Тоби, загрузите ваши плагины в wp-content/pluginsкаталог, а затем активируйте их оттуда.


6

Я видел много людей, которые рекомендовали установить разрешение для 777. У меня была та же проблема, что и 2 дня назад, и все, что я сделал, это добавил это в wp-content

define('FS_METHOD', 'direct');

а также

установить разрешение 775 для папки плагинов

Это решило мою проблему запроса логина / пароля для доступа по FTP.

Перед этим мне пришлось добавить плагин вручную, добавив ZIP-файл в папку плагина, а затем перейти wp-admin/pluginsи установить его.


5

Попробуйте это. Проверьте правильность разрешения для папки wp-content.

Отредактируйте wp-config.php и добавьте следующую строку

define('FS_METHOD', 'direct');

chmod каталог "wp-content" в www-data для полного доступа.

Теперь попробуйте установить плагин.


4

Да, ты можешь сделать это.

Вам нужно добавить

define('METHOD','direct');

в вашем wpconfig. Но этот метод не будет предпочтительным, потому что он имеет охранные функции.

Спасибо,


3

Способ 1: Вы можете установить это: 1. в wp-config.php вам нужно написать эти строки.

define('FS_METHOD', 'direct'); 

Примечание: установите это после define ('DB_CHARSET', 'utf8mb4').

  1. установить рекурсивное разрешение wp-контента или полное разрешение 777, которое вы можете дать через filezilla. запись нажмите на каталог> разрешения> проверить чтение-запись и выполнение, а также проверить Recurse в подкаталогах

    Способ 2:

или Вы также можете установить это

define("FTP_HOST", "localhost");
define("FTP_USER", "yourftpusername");
define("FTP_PASS", "yourftppassword");

к февралю 2020 года это четкая инструкция,Note: put this after define( 'DB_CHARSET', 'utf8mb4' ).
Osify

2

установка ftp, или даже SFTP-соединения, или chmod 777 - плохой путь для чего-либо, кроме локальной среды. Открытие даже метода SFTP создает больше рисков для безопасности, которые не нужны.

для этого необходимо разрешение на запись / wp-content / uploads & / wp-content / plugins / владельцем этих каталогов. (linux ls -la покажет вам право собственности).

Пользователь Apache по умолчанию - www-data.

CHMOD 777 позволяет редактировать эти файлы любому пользователю машины, а не только пользователю ветки apache / php.

SFTP, если вы еще не используете его, представит другую точку возможного сбоя из внешнего источника. В то время как для выполнения задачи вам нужен доступ только локальному пользователю, выполняющему процесс apache / php.

Я не видел, чтобы кто-то высказывал эти замечания, поэтому я подумал, что предложу эту информацию, чтобы помочь с нашими постоянными проблемами безопасности WP в Интернете.


2

Вот простой метод.

Выполните следующие команды.

Это включит ваш модуль mod_rewrite для Apache

$sudo a2enmod rewrite

Эта команда изменит владельца папки на www-data

$sudo chown -R www-data [Wordpress Folder Location]

После выполнения вышеуказанных команд вы можете установить любые темы без FTP.


1
Для Nginx просто запустите вторую командуsudo chown -R www-data [Wordpress Folder Location]
срокатоние

@srokatonie спасибо за комментарий. это будет полезно для всех.
Мануджа Джаявардана


1

Единственная причина, по которой WordPress не позволяет вам загружать плагин через панель администратора WordPress, когда у вас нет разрешения на запись в каталог / wp-content. Помните, что для вашего каталога wordpress / wp-content требуется уровень разрешений 0755. Существуют различные способы изменить уровень разрешений папки.

Изменение прав доступа к файлу с помощью cPanel:

Перейдите в диспетчер файлов и откройте общедоступную папку HTML, где должен находиться ваш веб-сайт WordPress, или откройте корневой каталог сайта, если ваш веб-сайт находится в какой-то другой папке. В корневом каталоге WordPress перейдите к папке wp-content; в конце строки папки wp-content в самом последнем поле указаны права доступа к файлам для этой папки. Обязательно измените уровень разрешений папки на 0755, и все готово.

Изменение прав доступа к файлу с помощью SSH-терминала:

В вашем терминале найдите корень сайта WordPress, который в моем случае был / var / www / html, поэтому для перемещения в корневой каталог WordPress введите следующую команду:

cd /var/www/html 

Теперь вы находитесь в корневом каталоге WordPress, где находится требуемая папка / wp-content. Поэтому, чтобы изменить права доступа к файлу, введите следующую команду:

sudo chmod wp-content 755 

Это изменит разрешение вашего файла каталога / wp-content на 0755.

Теперь вы не получите сообщение об ошибке загрузки плагинов WordPress через FTP.


0

Лучший способ установить плагин с использованием SSH - это WPCLI.

Обратите внимание, что доступ SSH является обязательным для использования команд WP CLI. Перед использованием проверьте, установлен ли WP CLI на вашем хост-сервере или компьютере.

Как проверить: wp --version[Он покажет установленную версию wp cli]

Если он не установлен, как его установить. Перед установкой WP-CLI убедитесь, что среда соответствует минимальным требованиям:

UNIX-подобная среда (OS X, Linux, FreeBSD, Cygwin); ограниченная поддержка в среде Windows. PHP 5.4 или более поздняя версия WordPress 3.7 или более поздняя версия. Версии, более старые, чем последний выпуск WordPress, могут иметь ухудшенную функциональность

Если вышеуказанные пункты удовлетворены, пожалуйста, следуйте инструкциям : Ссылочный URL: WPCLI

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
[ download the wpcli phar ]

php wp-cli.phar --info [ check whether the phar file is working ]

chmod +x wp-cli.phar [ change permission ]
sudo mv wp-cli.phar /usr/local/bin/wp [ move to global folder ]
wp --info [ to check the installation ]

Теперь WP CLI готов к установке.

Теперь вы можете установить любой плагин, доступный в WordPress.org, используя следующие команды:

wp install plugin plugin-slug
wp delete plugin plugin-slug
wp deactivate plugin plugin-slug

ПРИМЕЧАНИЕ: wp cli может устанавливать только те плагины, которые доступны на wordpress.org

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.