我可以在不提供FTP访问的情况下安装/更新WordPress插件吗?


564

我在实时服务器上使用WordPress,该服务器仅通过SSH密钥使用SFTP

我想安装和升级插件,但是看来您需要输入FTP登录才能安装插件。有没有一种方法可以通过手动上传文件而不是让WordPress处理整个过程来安装和升级插件?


3
是的你可以。只需使用cPanel或您拥有的任何其他文件上传工具;上载压缩的插件并解压缩到其中,wp-content/plugins/然后从wp仪表板转到“插件”标签并启用它。
WPDev

如果使用VPS,请尝试以下操作:stackoverflow.com/a/44137965/3160597
azerafati

@WPDev如果您的评论被列为答案,我会再次投票赞成,这是最有帮助的。
Tensigh

Answers:


771

如果WordPress无法/wp-content直接写入,则只会在尝试安装插件或WordPress更新时提示您输入FTP连接信息。否则,如果您的Web服务器具有对必要文件的写访问权,它将自动处理更新和安装。此方法不需要您具有FTP / SFTP或SSH访问权限,但需要在Web服务器上设置特定的文件权限。

它将按顺序尝试各种方法,如果Direct和SSH方法不可用,则使用FTP。

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”,但是您的Web用户(运行Web服务器的用户名)没有适当的写入权限,则会收到错误消息。

总之,如果您不想(或不能)更改wp-content的权限,以使您的Web服务器具有写权限,则可以将其添加到wp-config.php文件中:

define('FS_METHOD', 'direct');

权限说明如下:


30
我必须做:sudo chown -R www-data wp-content以及授予写权限
mikermcneil 2012年

5
getmyuid876行的使用在这里可能是错误的,因为它返回脚本所有者而不是脚本执行者的UID。我相信应该posix_getuid
cmbuckley 2012年

7
这种方法对安全性有何影响?
Jahmic

1
如果要查看哪个用户正在运行php,可以使用此方法: print_r(posix_getpwuid(posix_geteuid())); 您可以在wp-config文件中添加代码。
Ivan V.

3
chown -R www-data wordpress/wp-content没为我工作,但为我chown -R www-data wordpress做了
马丁

251

如前所述,烫发修复程序无法正常工作。您需要相应地更改烫发并将以下内容放入您的wp-config.php

define('FS_METHOD', 'direct');

11
即使我具有正确的权限,以便Web服务器可以写入插件目录和wp-content目录,此设置也已对其进行了修复,因此管理员不会提示您输入用于更新插件的FTP / SFTP设置。谢谢。工作完美。
肖恩·麦克莱里

7
我也必须明确地这样做。
julien_c 2012年

5
他们什么时候提出这个要求的?
danjp

我还不得不依靠此设置,即Ubuntu 12.04上的debian软件包安装的WP。否则,权限没问题,wp-content对组www-data具有rwx权限...
alci 2012年

2
请注意确保wp-config.php文件中没有以下内容:define('FS_METHOD','ftpext'); 在这种情况下,放置define('FS_METHOD','direct'); 文件底部的内容将无法使用。您必须删除或注释掉define('FS_METHOD','ftpext'); 如果您是从其他需要FTP的服务器上迁移过来的,则可能会发生这种情况。
Doug

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 2013年

2
谢谢,它也节省了我的一天,因为我没有FTP特权,而只有root用户访问权限。
shasi kanth 2014年

4
这是唯一帮助我的人!非常感谢,经过多年开发Wordpress网站,这仍然是一个经典问题!
acidghost 2014年

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. 安装插件(将插件目录复制到该wp-content/plugins目录中)。

处理版本3.2.1


4
也适用于4.0版。
Meetai.com 2014年

1
您必须添加此选项,但只需要更改wp-content / plugins上的权限
John Kloian 2014年

明确地,这是您在不提示输入FTP信息的情况下应该安装插件的步骤。您可以执行以下步骤以使用权限对WordPress进行加固,然后进行这2处更改,并且大多数情况下应保持安全。
bozdoz


34

只需快速更改wp-config.php

define('FS_METHOD','direct');

就是这样,不用ftp就可以享受您的wordpress更新!

替代方法:

那里有主机,它将阻止此方法简化您的WordPress更新。幸运的是,还有另一种方法可以防止这种有害生物提示您输入FTP用户名和密码。

同样,在wp-config.php文件中的MYSQL登录声明之后,添加以下内容:

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

22

为了使SSH2可以用于更新和主题上传,您必须生成SSH密钥并安装PHP SSH模块。然后WordPress将检测到您有可用的SSH2,并且在执行上载/升级时会看到一个不同的选项(SSH2)。

1.)确保已为debian安装了PHP模块:

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,这将在WordPress上传窗口中预先填充SSH凭据。

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 2015年

这样使用未加密的私钥是一个巨大的安全漏洞。但是您可以通过在“ authorized_keys”中的相关行前添加“ from = whatever”来缓解此问题。
markhahn

很棒,但是似乎与php7不兼容:core.trac.wordpress.org/ticket/35517
Supaiku

21

通常,您可以将插件上传到wp-content\plugins目录中。如果您无法通过SFTP访问此目录,恐怕您可能会被卡住。


是的,只需将它们放入wp-content / plugins中即可。
ceejayoz

17

您可以通过在命令promt上键入以下命令来轻松获得它

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

或将以下代码复制并粘贴到wp-config.php文件中。

define('FS_METHOD', 'direct');

其中“ your_folder_name”是将WordPress安装在此文件夹中的文件夹。



15

将以下代码添加到wp-config

define('FS_METHOD', 'direct');

FS_METHOD强制使用文件系统方法。它只能是direct,ssh2,ftpext或ftpsockets。通常,只有在遇到更新问题时才应更改此设置。如果您更改了它却无济于事,请将其更改回/删除。在大多数情况下,如果自动选择的方法无效,则将其设置为“ ftpsockets”即可。

(主要首选项)“直接”强制它使用PHP内部的直接文件I / O请求,这会给配置不良的主机带来安全性问题,在适当时会自动选择。

(第二优先级)“ ssh2”用于强制使用SSH PHP扩展(如果已安装)

(第三个首选项)“ ftpext”是强制将FTP PHP扩展名用于FTP访问,最后

(第四个优先级)“ ftpsockets”利用PHP套接字类进行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
不要将不需要的文件授予执行权限。
Burhan Ali

13

从变化php_modfastcgicgiSuEXEC启用。为我工作。

如果不工作,尝试改变wp-content,以775root身份:

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,没有上传任何内容。
D. Lambert

仅当您设置了文件许可权后,Web服务器/ PHP用户才能写入文件许可权,这才成立。如果不是,它将提示您输入FTP / SFTP凭据。请参阅stereointeractive.com的答案。
Dave Forgac 2011年

9

恢复了旧线程,但是有一个很棒的新插件叫做SSH SFTP Updater Support,它增加了SFTP功能,而无需编辑wp-config.php文件。另外,Wordpress的SFTP实现依赖于一些晦涩难懂的PHP模块,这些模块通常未在服务器上启用。该插件打包了一个不同的PHP SFTP插件,因此您无需在Apache端进行任何配置。

让SFTP支持正常工作时遇到了很多问题-这个插件解决了所有问题,真是太棒了。


9

尝试这个

1)在wp-config.php添加define('FS_METHOD', 'direct');

2)将wp-content目录设置777为可写。

3)现在安装插件。


6
嗨,Mohan,谢谢您提供FS_METHOD选项。这确实是我想要的。我确实需要说以下几点:除非有特殊情况,否则每个目录都不需要777。这使得目录世界可读,可写且可执行。这是巨大的安全风险。正确的解决方案是找出您的Apache用户(www-data,_www或类似用户)。该用户需要对wp-content的读写权限,或者需要对该目录拥有所有权(“ sudo chown www-data wp-content”),没有执行权限。抱歉,直言不讳,但是777对于网络内容来说很危险。
鲁宾

8
不要将您的上传目录设为777,这是不安全的,不应作为答案!
MKN Web Solutions

8

立体互动的答案涵盖了所有选项。只是想提一下使用FTP的另一种方法。我猜测您不允许FTP访问的原因是出于安全性考虑。解决这些安全问题的一种方法是运行FTP服务器,使其仅侦听127.0.0.1

这使您可以从WordPress内部使用FTP,并且可以安装插件,而无需将其暴露给世界各地。这也可以应用于其他流行的Web应用程序,例如Joomla!。和Drupal。这就是我们对BitNami设备云服务器所做的工作,并且运行良好。


8

我还建议使用SSH SFTP Updater支持插件。刚刚也解决了我所有的问题...尤其是在通过管理员删除插件方面。只需以通常的方式安装它,下次WordPress提示您输入FTP详细信息时,将有其他字段可用于复制/粘贴您的私密SSH密钥或上载PEM文件。

我唯一的问题是让它记住密钥(尝试了两种方法)。不喜欢每次我需要删除插件时都必须查找并输入它的想法。但是至少目前这是一个固定的解决方案。


1
“会有额外的字段供您复制/粘贴您的私有SSH密钥” ....我不是安全天才,但是...不是私有ssh密钥的全部内容,您不必通过网络发送它们?
2015年

8

是的,直接在WordPress中安装插件。

  1. 复制插件文件夹并粘贴到WordPress插件文件夹中。
  2. 转到管理员端(/ test / wp-admin),然后转到插件链接上并检查插件的名称。
  3. 激活插件,以便轻松安装插件。

其他选择

  1. 为插件代码创建zip文件。
  2. 转到管理员端(/ test / wp-admin),然后转到插件链接上,然后单击“添加新内容”,然后浏览插件zip文件夹并安装插件,然后选择激活插件选项,因此激活插件并激活插件。

6

可以使用SFTP或SSH自动更新WordPress中的插件,但您需要具有ssh2 pecl扩展名。您可以使用以下教程来了解如何做


6

我们将SSH和SFTP结合使用(在我们的开发服务器和实时服务器上),我已经尝试(虽然不太难)使用WordPress上载功能。我同意Toby的观点,将您的插件上传到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');

将“ 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-content权限或递归设置777完全权限,您可以通过filezilla授予它。写入单击目录>权限>单击读写并执行,然后选中递归到子目录

    方法2:

或者您也可以设置

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

到2020年2月,这是一个明确的指示,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

这是一个简单的方法。

执行以下命令。

这将为Apache启用mod_rewrite模块

$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

@srokatonie感谢您的评论。这将对每个人都有用。
Manuja Jayawardana


1

当您没有权限在/ wp-content目录上写入时,WordPress不允许您通过WordPress管理仪表板上传任何插件的唯一原因。请记住,您的wordpress目录/ wp-content需要0755权限级别。有多种方法可以更改文件夹的权限级别。

使用cPanel更改文件权限:

转到文件管理器,打开您的wordpress网站应该位于的公共HTML文件夹,或者如果您的网站位于其他文件夹中,则打开网站根目录。在您的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。

现在,您将不会收到通过FTP上传wordpress插件的错误消息。


0

使用SSH安装插件的最佳方法是WPCLI。

请注意,使用WP CLI命令必须进行SSH访问。使用它之前,请检查您的托管服务器或计算机上是否已安装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中可用的那些插件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.