Wordpress 找不到 ssh 公钥和私钥对

Wordpress 找不到 ssh 公钥和私钥对

我的服务器配置如下:运行 Nginx 的 CentOS 5.8(最终版本)。

我正在使用 Wordpress 插件安装程序的 SSH2 功能。

我已经安装lib2ssh并且它正在运行(Wordpress 承认它的存在)。

我提供给 wordpress 的用户(称为playwithbits)已 chroot,其主目录为/home/nginx/domains/playwithbits/

公钥和私钥位于目录中/home/nginx/domains/playwithbits/keys/,分别名为id_rsa.pubid_rsa

我已将内容复制到 位于的id_rsa.pub文件中authorized_keys/home/nginx/domains/playwithbits/.ssh/

我没有为密钥文件设置密码。但是 Wordpress 一直返回错误:

playwithbits 的公钥和私钥不正确

我已向 Wordpress 提供了以下信息

Hostname: localhost
Username: playwithbits
Password: Blank
Public key: /keys/id_rsa.pub //I have also tried the paths from server root
Private key: /keys/id_rsa

以下是我对相关文件夹和文件设置的权限:

drwx------ 2 playwithbits playwithbits 4096 Jun  8 11:25 .ssh
drwx------ 2 playwithbits playwithbits 4096 Jun  8 13:27 keys
-rw------- 1 playwithbits playwithbits  414 Jun  8 11:21 authorized_keys
-rw------- 1 playwithbits playwithbits 1.7K Jun  6 02:17 id_rsa
-rw-r--r-- 1 playwithbits playwithbits  414 Jun  6 02:17 id_rsa.pub

我还尝试在调试模式下连接,得到以下输出:

Connection from 127.0.0.1 port 56674
debug1: Client protocol version 2.0; client software version libssh2_0.18 PHP
debug1: no match: libssh2_0.18 PHP
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.8
debug1: permanently_set_uid: 74/74
debug1: list_hostkey_types: ssh-rsa,ssh-dss
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: client->server aes256-cbc hmac-sha1 none
debug1: kex: server->client aes256-cbc hmac-sha1 none
debug1: expecting SSH2_MSG_KEXDH_INIT
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: KEX done
Received disconnect from 127.0.0.1: 11: PECL/ssh2 (http://pecl.php.net/packages/ssh2)
debug1: do_cleanup
debug1: do_cleanup

有人知道为什么我不能使用公钥和私钥访问吗?如果我使用帐户密码,WordPress 就可以登录并执行更新。

编辑:在我的sshd_config文件中,我有以下规则:

Match group web-root-locked
         ChrootDirectory /home/nginx/domains/%u
         X11Forwarding no
         AllowTcpForwarding no
         ForceCommand internal-sftp
         AuthorizedKeysFile /home/nginx/domains/%u/.ssh/authorized_keys

playwithbits是...的成员web-root-locked

答案1

经过反复尝试,我找到了答案。密钥必须由网络服务器拥有,而不是我尝试登录的用户拥有。

chown nginx:nginx id_rsa
chown nginx:nginx id_rsa.pub

现在它就像梦一样运行。

答案2

我的第一直觉是:id_rsa应该在 ~/.ssh/

Apache 可能会通过 fork、子进程、这些进程的子进程等方式生成各种进程。为此,我会使用审计日志工具找出 Wordpress 认为它​​尝试打开的路径。

`auditctl -a entry,always -F arch=`arch` -F euid!=0 -S open`
`auditctl -a entry,always -F arch=`arch` -F euid!=0 -S stat`

这些应该可以捕获尝试。您可以通过grep id_rsa在审计日志中查看尝试打开的内容来找到它。如果这没有提供信息,那么深入挖掘chdir监控等将是可行的方法,但我非常有信心open系统调用会捕获此问题。

一旦您知道它要做什么,您就可以确定该路径是否相对于用户主目录、另一个用户的主目录、http 根目录、FS 根目录等。

更新

使用 ssh 进行 Wordpress 更新的教程显示使用完整路径来指定密钥。

Wordpress ssh 连接信息

答案3

尝试这个插件。它允许您通过浏览器从计算机上传 SSH 私钥。不需要公钥。

答案4

对于使用 Apache 的用户,以下是我解决 Ubuntu 14.04 上的权限问题的方法

首先为apache添加用户组:

usermod -a -G myuser www-data

然后只需授予私钥的读取权限:

chmod g+r /home/myuser/.ssh/id_rsa

相关内容