本质上,WordPress需要连接回它实际运行的服务器。
WordPress有几种可能的方式来写入文件,从而在升级过程中“覆盖”自身。从安全角度来看,此过程的重要部分是新文件必须与旧文件具有相同的所有权。
因此,WordPress首先通过直接写入一个文件并检查结果所有者是谁来执行测试。如果所有者与PHP文件匹配,那么它知道它可以编写具有正确所有权的文件(这意味着进程对于文件所有者来说是“setuid”)。
如果生成的文件由不同的用户id拥有(如果Apache/PHP作为不同的用户运行,如“www”或“Apache”用户,则WordPress必须使用不同的方法创建具有正确所有者的文件。
一种方法是简单的FTP。如果它将FTP连接回其所在的服务器,然后在该服务器上写入文件,则生成的文件将归通过FTP登录的任何人所有。因此,它会提示用户输入FTP信息。
但是FTP不是很安全。正如您所发现的,另一种方法是通过SSH2。使用PHP的SSH库,它可以以相同的方式建立回服务器的SSH连接。这就是它需要私钥的原因,因为它使用私钥来建立与自身的传出连接。通过建立该连接,它可以设置凭据,并以拥有这些凭据的用户的身份写入文件。
如果您担心它是否拥有这些密钥,那么生成一组新的密钥并专门用于此目的。
要回答您的直接问题,不,WordPress不会在任何地方“给出”键。它下载升级包,将其解压缩,然后使用这些密钥连接回自己的服务器(基本上是环回),然后通过该连接复制文件。这样,凭据意味着文件获得了正确的所有权,避免了将WordPress文件归Apache/www/php主进程所有的安全问题。