¿Puedo instalar / actualizar complementos de WordPress sin proporcionar acceso FTP?


565

Estoy usando WordPress en mi servidor en vivo que solo usa SFTP usando una clave SSH .

Quiero instalar y actualizar complementos, pero parece que debe ingresar su inicio de sesión FTP para instalar los complementos. ¿Hay alguna forma de instalar y actualizar complementos cargando manualmente los archivos en lugar de hacer que WordPress se encargue de todo el proceso?


3
Sí tu puedes. Simplemente usando cPanel o cualquier otra herramienta de carga de archivos que tenga; cargue el complemento comprimido y extráigalo en el wp-content/plugins/tablero de wp, vaya a la pestaña de complementos y habilítelo.
WPDev

Si usa a VPS, debe probar esto: stackoverflow.com/a/44137965/3160597
azerafati

@WPDev Si su comentario apareciera como respuesta, lo votaría nuevamente, fue lo más útil.
Tensigh

Respuestas:


772

WordPress solo le pedirá su información de conexión FTP mientras intenta instalar complementos o una actualización de WordPress si no puede escribir en /wp-content directamente. De lo contrario, si su servidor web tiene acceso de escritura a los archivos necesarios, se encargará de las actualizaciones y la instalación automáticamente. Este método no requiere que tenga acceso FTP / SFTP o SSH, pero sí requiere que tenga permisos de archivo específicos configurados en su servidor web.

Probará varios métodos en orden y recurrirá a FTP si los métodos Direct y SSH no están disponibles.

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

WordPress intentará escribir un archivo temporal en su /wp-contentdirectorio. Si esto tiene éxito, compara la propiedad del archivo con su propio uid, y si hay una coincidencia, le permitirá usar el método 'directo' para instalar complementos, temas o actualizaciones.

Ahora, si por alguna razón no desea confiar en la verificación automática de qué método de sistema de archivos usar, puede definir una constante, 'FS_METHOD'en su wp-config.phparchivo, que sea cualquiera 'direct', 'ssh', 'ftpext' or 'ftpsockets'y usará ese método. Tenga en cuenta que si configura esto como 'directo', pero su usuario web (el nombre de usuario con el que se ejecuta su servidor web) no tiene los permisos de escritura adecuados, recibirá un error.

En resumen, si no desea (o no puede) cambiar los permisos en wp-content para que su servidor web tenga permisos de escritura, entonces agréguelo a su archivo wp-config.php:

define('FS_METHOD', 'direct');

Permisos explicados aquí:


30
Tuve que hacer: sudo chown -R www-data wp-content, así como otorgar permisos de escritura
mikermcneil

55
El uso de la getmyuidlínea 876 es posiblemente incorrecto aquí, ya que devuelve el UID del propietario del script, no el ejecutor del script. Yo creo que debería ser posix_getuid.
cmbuckley

77
¿Cuáles son las implicaciones de seguridad de este enfoque?
Jahmic

1
Si desea ver con qué usuario se está ejecutando php, puede usar esto: print_r(posix_getpwuid(posix_geteuid())); puede agregar el código en el wp-configarchivo.
Ivan V.

3
chown -R www-data wordpress/wp-contentno funcionó para mí, pero lo chown -R www-data wordpresshizo
Martin

252

Como se indicó antes, ya no funciona ninguna de las correcciones permanentes. Debe cambiar los permisos en consecuencia Y poner lo siguiente en su wp-config.php:

define('FS_METHOD', 'direct');

11
Aunque tenía los permisos correctos para que el servidor web pudiera escribir en el directorio de complementos y en el directorio wp-content, esta configuración lo solucionó de manera que el administrador no solicitó la configuración de FTP / SFTP para actualizar los complementos. Gracias. Funcionó a la perfección.
Sean McCleary

77
Tuve que hacer esto explícitamente también.
julien_c

55
¿Cuándo hicieron esto un requisito?
danjp

También tuve que confiar en esta configuración, en el WP instalado por el paquete debian en Ubuntu 12.04. De lo contrario, los permisos estaban bien, wp-content tiene permiso rwx para el grupo www-data ...
alci

2
Observe para asegurarse de que lo siguiente no esté ya en el archivo wp-config.php: define ('FS_METHOD', 'ftpext'); En este caso, colocando define ('FS_METHOD', 'direct'); al final del archivo no funcionará. Tendrá que borrar o comentar la definición ('FS_METHOD', 'ftpext'); Es probable que esto suceda particularmente si ha migrado desde otro servidor que requirió FTP.
Doug

104

Solo quería agregar que NUNCA debe establecer el wp-contentpermiso o el permiso de ninguna carpeta 777.

Esto es lo que tuve que hacer para:

1) Establezco la propiedad de la carpeta de WordPress (recursivamente) para el usuario de Apache, de esta manera:

# chown -R apache wordpress/

2) Cambié la propiedad del grupo de la carpeta de wordpress (recursivamente) al grupo apache, así:

# chgrp -R apache wordpress/

3) otorgue al propietario todos los privilegios para el directorio, así:

# chmod u+wrx wordpress/*

Y eso hizo el trabajo. Mi wp-contentcarpeta tiene 755permisos, por cierto.

TL; versión DR:

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

11
configurar su wordpress como propiedad de apache es tan malo como configurar 777. El resultado es el mismo: cualquier script php ahora puede alterar sus archivos de wordpress. La mejor opción es crear un apache: apache temporal, instalar sus actualizaciones y volver al original O usar el truco ssh / ftp
woens

11
Estoy en desacuerdo. No es lo mismo que configurarlo en 777. Cualquier usuario en la máquina tendría acceso de escritura si establece los permisos en 777. Eso es un problema en sí mismo. y si bien tiene razón, que apache puede alterar los archivos php ahora, esa sería la intención en primer lugar (para actualizar o instalar cualquier cosa). Si alguien logra poner archivos php maliciosos en el servidor, ese es un problema completamente nuevo y el hecho de pertenecer a diferentes usuarios haría poco para ayudar.
sufinawaz

2
Gracias, también me salvó el día, ya que no tengo privilegios de FTP, sino solo acceso de root.
shasi kanth

44
¡Este es el único que me ayudó! Muchas gracias, después de años desarrollando sitios de Wordpress, ¡este sigue siendo un problema clásico!
acidghost

1
Si está ejecutando WordPress bajo una compilación inusual, pegue esto en un archivo PHP para verificar quién se está ejecutando Apache (ubuntu, por ejemplo, es www-data): <? Php echo exec ('whoami'); ?>
Imperativo

70
  1. En wp-config.phpagregardefine('FS_METHOD', 'direct');
  2. Hacer servidor puede escribir en los directorios wp-content/, wp-content/plugins/.
  3. Instale el complemento (copie el directorio del complemento en el wp-content/pluginsdirectorio).

Trabajado en la versión 3.2.1


44
Funcionó en la versión 4.0 también.
Meetai.com

1
Debe agregar esta opción, pero solo necesita cambiar los permisos en wp-content / plugins
John Kloian

Estos son explícitamente los pasos que debe seguir para instalar un complemento sin que se le solicite información de FTP. Puede seguir los pasos para Endurecer WordPress con permisos, y luego hacer estos 2 cambios, y debería permanecer mayormente seguro.
bozdoz

51

abra el wp-config.phparchivo y agregue la siguiente línea:

define('FS_METHOD', 'direct');

esto está funcionando para mí ... Gracias


También funciona (y parece necesario) en la versión 5.4 a partir de junio de 2020.
Ralf Hein

34

Solo un cambio rápido a wp-config.php

define('FS_METHOD','direct');

Eso es todo, ¡disfruta de tus actualizaciones de WordPress sin ftp !

Metodo alternativo:

Existen hosts que evitarán que este método funcione para facilitar la actualización de WordPress. Afortunadamente, hay otra forma de evitar que esta plaga le solicite su nombre de usuario y contraseña de FTP.

Nuevamente, después de las declaraciones de inicio de sesión MYSQL en su archivo wp-config.php, agregue lo siguiente:

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

22

Para habilitar el uso de SSH2 para sus actualizaciones y cargas de temas, debe generar sus claves SSH y tener instalado el módulo PHP SSH. Luego, WordPress detectará que tiene SSH2 disponible y verá una opción diferente (SSH2) que se muestra al realizar una carga / actualización.

1.) Asegúrese de tener el módulo PHP instalado para Debian es:

sudo apt-get install libssh2-php

2.) Generar claves SSH, agregar una frase de contraseña es opcional:

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

3.) Cambie el permiso para que WordPress pueda acceder a esas teclas:

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

Ahora obtendrá la opción SSH2 cuando realice una carga / actualización / complemento. Conexión WP SSH

4.) Para mayor facilidad, puede configurar los valores predeterminados en su wp-config.phpy esto rellenará previamente las credenciales SSH en la ventana de carga de 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');

La 'frase de contraseña' es opcional, si no configura una frase de contraseña durante ssh-kengen; entonces no lo agregueswp-config.php

Esto resolvió mi problema. Y no tuve que hacer chownnada en absoluto. Pero he visto este método referenciado en otros lugares.

Referencias


no soy un experto en seguridad, y me doy cuenta de que wordpress incluyó esta capacidad y pensé que estaba bien ... pero no me siento bien con esto ... 1. tener una cuenta ssh sin frase de contraseña, (cualquiera que alguna vez obtenga el luego, la clave privada puede iniciar sesión de forma remota en cualquier momento que deseen sin una contraseña) y 2. tener una frase de contraseña almacenada en texto sin formato (ver 1). me recuerda a rsh, dependiendo de la idea de que "nadie tendrá acceso a mis archivos locales" para proteger la contraseña de red de un sistema.
Don brillante

Estoy seguro de que puede generar la frase de contraseña y NO agregarla a wp-config.php, entonces solo tendrá que escribirla cuando llegue al cuadro de diálogo Información de conexión.
JacquelineIO

Es un gran agujero de seguridad utilizar una clave privada sin cifrar de esta manera. Pero puede mitigar el problema anteponiendo un "from = whatever" a la línea correspondiente en autorizado_keys.
markhahn

Esto es genial, pero parece que hay una incomptabilidad con php7: core.trac.wordpress.org/ticket/35517
Supaiku

21

Por lo general, solo puede cargar su complemento en el wp-content\pluginsdirectorio. Si no tiene acceso a este directorio a través de SFTP, me temo que puede estar atascado.


Sí, simplemente colóquelos en wp-content / plugins.
ceejayoz

17

Puede obtenerlo muy fácilmente escribiendo el siguiente comando en el símbolo del sistema

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

o copie y pegue el siguiente código en su archivo wp-config.php.

define('FS_METHOD', 'direct');

Donde "your_folder_name" es la carpeta donde está instalado su WordPress dentro de esta carpeta.



15

Agregue el siguiente código a wp-config

define('FS_METHOD', 'direct');

FS_METHOD fuerza el método del sistema de archivos. Solo debe ser directo, ssh2, ftpext o ftpsockets. En general, solo debe cambiar esto si tiene problemas de actualización. Si lo cambia y no ayuda, cámbielo / elimínelo. En la mayoría de las circunstancias, establecerlo en 'ftpsockets' funcionará si el método elegido automáticamente no lo hace.

(Preferencia primaria) "directo" lo obliga a usar solicitudes directas de E / S de archivos desde PHP, esto está plagado de problemas de seguridad en hosts mal configurados. Esto se elige automáticamente cuando es apropiado.

(Preferencia secundaria) "ssh2" es forzar el uso de la extensión SSH PHP si está instalado

(3.a preferencia) "ftpext" es forzar el uso de la extensión FTP PHP para acceso FTP, y finalmente

(4ta preferencia) "ftpsockets" utiliza la clase de sockets PHP para acceso FTP

Para obtener más información, visite: http://codex.wordpress.org/Editing_wp-config.php#WordPress_Upgrade_Constants


15

Si estás en Ubuntu , una solución rápida que funcionó para mí es darle la propiedad al usuario de Apache (www-data por defecto) de esta manera:

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

2
No le dé permiso de ejecución a los archivos que no lo necesitan.
Burhan Ali

13

Cambiar de php_moda fastcgicon cgiy SuEXEChabilitado. Funciona para mi.

Si no funciona, intente cambiar wp-contenta 775root:

chmod -R 775 ./wp-content

Añadir a wp-config.php:

define('FS_METHOD', 'direct');

espero que funcione


12

WordPress 2.7 le permite cargar un archivo zip directamente (hay un enlace en la parte inferior de la página de complementos): no se necesita acceso FTP. Esta es una nueva característica en 2.7, y funciona solo para complementos (no temas aún).


Por cierto, la actualización es aún más fácil: verá un icono que indica que hay una nueva versión disponible, y hace clic en "actualizar" y deja que haga lo suyo. Muy agradable. Incluso el núcleo de WordPress se actualiza de esta manera: pasé de 2.7 a 2.7.1 sin cargar nada.
D. Lambert

Esto solo es cierto si tiene configurados los permisos de archivo para que el servidor web / usuario PHP pueda escribirles. De lo contrario, le solicitará las credenciales FTP / SFTP. Ver la respuesta de stereointeractive.com.
Dave Forgac

9

Resucitando un hilo antiguo, pero hay un fantástico complemento nuevo llamado SSH SFTP Updater Support que agrega capacidades SFTP sin necesidad de editar su wp-config.phparchivo. Además, la implementación de SFTP de Wordpress se basa en algunos módulos PHP algo oscuros que a menudo no están habilitados en los servidores; este complemento empaqueta un complemento PHP SFTP diferente para que no tenga que configurar nada en el lado de Apache.

Me he encontrado con muchos problemas para que funcione el soporte SFTP: este complemento los resolvió todos y es simplemente fantástico.


9

Prueba esto

1) En el wp-config.phpcomplementodefine('FS_METHOD', 'direct');

2) Establezca el wp-contentdirectorio en 777para escritura.

3) Ahora instale el complemento.


66
Hola Mohan, gracias por la opción FS_METHOD. Esto es de hecho lo que estaba buscando. Necesito decir lo siguiente: ningún directorio debería necesitar 777 a menos que las circunstancias sean excepcionales. Esto hace que un directorio sea legible, escribible y ejecutable. Este es un riesgo de seguridad masivo. La solución adecuada es descubrir quién es su usuario de apache (www-data, _www o similar). Este usuario necesita acceso de lectura y escritura a wp-content o necesita propiedad sobre este directorio ('sudo chown www-data wp-content'), sin derechos de ejecución. Lamento ser un poco directo, pero 777 es peligroso para el contenido web.
Ruben

8
¡No 777 su directorio de cargas, esto no es seguro y no debería ser una respuesta!
MKN Web Solutions

8

La respuesta de stereointeractive cubre todas las opciones. Solo quería mencionar una forma alternativa de usar FTP. Supongo que la razón por la que no está permitiendo el acceso FTP es por seguridad. Una forma de abordar esas preocupaciones de seguridad es ejecutar su servidor FTP escuchando solo en 127.0.0.1

Esto le permite usar FTP desde WordPress y podrá instalar complementos sin exponerlo al resto del mundo. Esto también se puede aplicar a otras aplicaciones web populares como Joomla! y Drupal Esto es lo que hacemos con nuestros dispositivos BitNami y servidores en la nube y funciona bastante bien.


8

También recomiendo el complemento SSH SFTP Updater Support . También resolví todos mis problemas ... especialmente en lo que respecta a obtener complementos para eliminar a través del administrador. Simplemente instálelo de la manera habitual, y la próxima vez que WordPress le solicite detalles FTP, habrá campos adicionales para que copie / pegue su clave SSH privada o cargue su archivo PEM.

El único problema que tengo es lograr que recuerde la clave (probé ambos métodos). No me gusta la idea de tener que buscarlo e ingresarlo cada vez que necesito eliminar un complemento. Pero al menos es una solución sólida por ahora.


1
"habrá campos adicionales para que copie / pegue su clave SSH privada" ... no soy un genio de la seguridad pero ... no es el objetivo de las claves ssh privadas que nunca tiene que enviarlas a través de una red ?
Don brillante

8

Sí, instale directamente el complemento en WordPress.

  1. Copie la carpeta del complemento y péguelo en la carpeta del complemento de WordPress.
  2. vaya al lado del administrador (/ test / wp-admin) y luego vaya al enlace del complemento y verifique el nombre del complemento.
  3. Active el complemento para instalarlo fácilmente.

otra opción

  1. cree el archivo zip para el código del complemento.
  2. vaya al lado del administrador (/ test / wp-admin) y luego vaya al enlace del complemento y luego haga clic en agregar nuevo, luego explore la carpeta zip del complemento e instale el complemento y luego salga la opción activar el complemento, así que active el complemento y activar el complemento

6

Es posible usar SFTP o SSH para actualizar automáticamente los complementos en WordPress, pero debe tener la extensión ssh2 pecl. Puedes averiguar cómo hacerlo usando el siguiente tutorial


6

Usamos SFTP con SSH (tanto en nuestros servidores de desarrollo como en vivo), y he intentado (aunque no demasiado) usar la función de carga de WordPress. Estoy de acuerdo con Toby, suba sus complementos al wp-content/pluginsdirectorio y luego actívelos desde allí.


6

Vi a mucha gente recomendando establecer el permiso en 777. Tuve el mismo problema que hace 2 días y todo lo que hice fue agregar esto a wp-content

define('FS_METHOD', 'direct');

y

establecer permiso a 775 para la carpeta de complementos

Esto resolvió mi problema de solicitar acceso / contraseña de acceso FTP.

Antes de eso, tuve que agregar el complemento manualmente agregando el archivo .zip a la carpeta del complemento y luego ir wp-admin/pluginsy tuve que instalarlo.


5

Pruebe esto Compruebe si se otorga el permiso correcto a la carpeta wp-content.

Edite el wp-config.php agregue la siguiente línea

define('FS_METHOD', 'direct');

chmod el directorio "wp-content" a www-data para acceso completo.

Ahora intente instalar el complemento.


4

Sí, tú puedes hacerlo.

Necesitas agregar

define('METHOD','direct');

en tu wpconfig. Pero este método no será preferible porque tiene voilidades de seguridad.

Gracias,


3

Método 1: Puede configurar esto: 1. en wp-config.php necesita escribir estas líneas.

define('FS_METHOD', 'direct'); 

Nota: coloque esto después de definir ('DB_CHARSET', 'utf8mb4').

  1. configura el permiso wp-content o el permiso recursivamente 777 permiso completo que puedes otorgar a través de filezilla. escribir haga clic en el directorio> permisos> verificar leer-escribir y ejecutar y también verificar Recurse en subdirectorios

    Método 2:

o también puedes configurar esto

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

para febrero de 2020, es una instrucción clara,Note: put this after define( 'DB_CHARSET', 'utf8mb4' ).
Osify

2

configurar un ftp o incluso una conexión SFTP o chmod 777 son malas maneras de elegir algo que no sea un entorno local. Abrir incluso un método SFTP introduce más riesgos de seguridad que no son necesarios.

lo que se necesita es un permiso de escritura para / wp-content / uploads & / wp-content / plugins / por parte del propietario de esos directorios. (linux ls -la le mostrará la propiedad).

El usuario predeterminado de apache que se ejecuta es www-data.

chmod 777 permite que cualquier usuario en la máquina edite esos archivos, no solo el usuario del hilo apache / php.

SFTP si aún no lo está utilizando, introducirá otro punto de posible falla de una fuente externa. Mientras que solo necesita acceso por parte del usuario local que ejecuta el proceso apache / php para completar el objetivo.

No vi a nadie haciendo estos puntos, así que pensé en ofrecer esta información para ayudar con nuestros constantes problemas de seguridad de WP en línea.


2

Aquí hay un método simple.

Ejecute los siguientes comandos.

Esto habilitará su módulo mod_rewrite para Apache

$sudo a2enmod rewrite

Este comando cambiará el propietario de la carpeta a www-data

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

Después de ejecutar los comandos anteriores, puede instalar cualquier tema sin FTP.


1
Para Nginx, simplemente ejecute el segundo comandosudo chown -R www-data [Wordpress Folder Location]
srokatonie

@srokatonie gracias por el comentario. Esto será útil para todos.
Manuja Jayawardana


1

La única razón por la cual WordPress no le permitirá cargar ningún complemento a través del panel de administración de WordPress cuando no tiene permiso para escribir en el directorio / wp-content. Recuerde que su directorio wordpress / wp-content requiere un nivel de permiso 0755. Hay varias formas de cambiar el nivel de permiso de una carpeta.

Cambio de permisos de archivo usando cPanel:

Vaya al Administrador de archivos al abrir la carpeta HTML pública donde se supone que debe estar su sitio web de WordPress, o abra el directorio raíz del sitio si su sitio web está en alguna otra carpeta. En su directorio raíz de WordPress, navegue hacia la carpeta wp-content; al final de la fila de la carpeta wp-content, el último cuadro contiene permisos de archivo para esta carpeta. Asegúrese de editar el nivel de permiso de la carpeta a 0755, y ya está.

Cambio de permisos de archivo usando terminal SSH:

En su terminal, ubique la raíz del sitio de WordPress que en mi caso era / var / www / html para pasar al directorio raíz de WordPress ingrese el siguiente comando:

cd /var/www/html 

Ahora está en el directorio raíz de WordPress donde se encuentra la carpeta / wp-content requerida. Entonces, para cambiar los permisos del archivo, escriba el siguiente comando:

sudo chmod wp-content 755 

Esto cambiará su permiso de archivo de directorio / wp-content a 0755.

Ahora no recibirá un mensaje de error al cargar complementos de WordPress a través de FTP.


0

La mejor manera de instalar el complemento utilizando SSH es WPCLI.

Tenga en cuenta que el acceso SSH es obligatorio para usar los comandos WP CLI. Antes de usarlo, compruebe si la CLI de WP está instalada en su servidor o máquina de alojamiento.

Cómo verificar: wp --version[Mostrará la versión wp cli instalada]

Si no está instalado, cómo instalarlo: antes de instalar WP-CLI, asegúrese de que el entorno cumpla con los requisitos mínimos:

Entorno similar a UNIX (OS X, Linux, FreeBSD, Cygwin); Soporte limitado en entorno Windows. PHP 5.4 o posterior WordPress 3.7 o posterior. Las versiones anteriores a la última versión de WordPress pueden tener una funcionalidad degradada

Si los puntos anteriores están satisfechos, siga los pasos: URL de referencia: 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 ]

Ahora WP CLI está listo para instalar.

Ahora puede instalar cualquier complemento que esté disponible en WordPress.org utilizando los siguientes comandos:

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

NOTA: wp cli solo puede instalar aquellos complementos que están disponibles en wordpress.org

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.