我的服务器配置如下:CentOS 5.8 (final) running Nginx。
我正在使用 Wordpress 插件安装程序的 SSH2 功能。
我已经安装lib2ssh
并且可以正常工作(Wordpress 承认它存在)。
我提供给 wordpress的用户(称为playwithbits
)是 chroot 并且具有主目录/home/nginx/domains/playwithbits/
公钥和私钥位于目录/home/nginx/domains/playwithbits/keys/
中,分别命名为id_rsa.pub
和id_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
通过反复试验找到了答案。密钥需要由网络服务器而不是我尝试登录的用户拥有。
现在它像梦一样工作。
我的第一直觉:
id_rsa
应该在 ~/.ssh/Apache 可能正在通过 fork、子进程、这些进程的子进程等生成各种进程。为此,我会通过使用审计日志工具找出 Wordpress 认为它试图打开的路径。
那些应该抓住尝试。您可以通过
grep id_rsa
在审核日志上执行操作以查看尝试打开来找到它。如果那不提供信息,那么通过chdir
监控等进行更深入的挖掘将是可行的方法,但我非常有信心open
系统调用会捕捉到这一点。一旦知道它要做什么,就可以确定该路径是相对于用户主目录、另一个用户的主目录、http 根目录、FS 根目录等。
更新
关于使用 ssh 更新 Wordpress的本教程展示了使用完整路径来指定密钥。
试试这个插件。它允许您通过浏览器从您的计算机上传 SSH 私钥。不需要公钥。
对于那些使用 apache 的人,这里是我如何解决 Ubuntu 14.04 上的权限问题
先添加用户所在的组so apache:
然后所需要做的就是授予对私钥的读取权限: