Phabricator配置sshd时提示Permission denied (publickey)的解决思路

参考官方配置文档:

https://phabricator.webfuns.net/book/phabricator/article/diffusion_hosting/

配置完成后,执行命令:

1
echo {} | ssh -vvv phabricator@pha.heiljo.com -p 2221 conduit conduit.ping

始终提示错误:

1
Permission denied (publickey).

排查错误思路:

1 第一步把服务端sshd的守护命令临时改为前台执行,便于调试

1
/usr/sbin/sshd -d -d -d -f /etc/ssh/sshd_config.phabricator

2 把sshd的执行用户vc_user(我使用的用户名叫phabricator/home/.ssh/创建一对公私钥,如果已经存在则不再创建。然后将id_ras.pub的值上传到phabricator的后台setting->upload_ssh_key

3 在vc_user用户任意目录执行

1
echo {} | ssh -vvv phabricator@pha.heiljo.com -p 2221 conduit conduit.ping

4 查看服务端的sshd前台进程日志返现有如下信息

5 意思应该是没有找到对应的公钥,但是明明已经上传到后台了。这里说明一下,在配置/etc/ssh/sshd_config.phabricator时里面几条配置的意思

AuthorizedKeysFile none

公钥不指定具体的查找目录

AuthorizedKeysCommand /usr/libexec/phabricator-ssh-hook.sh

公钥使用该脚本查找

AuthorizedKeysCommandUser phabricator

脚本执行用户

AllowUsers phabricator

允许执行脚本的用户

搞清楚了这几个信息后,就把问题锁定到该脚本

1
/usr/libexec/phabricator-ssh-hook.sh

打开脚本发现其实是一个执行php脚本的逻辑,可以自己看看/htdocs/phabricator/phabricator/bin/ssh-auth

手动执行该脚本

1
/usr/libexec/phabricator-ssh-hook.sh phabricator

得到了php的一个异常

1
EXCEPTION: (Exception) Define 'phabricator.base-uri' in your configuration to continue.

配置phabricator.base-uri

1
./bin/config set phabricator.base-uri 'http://pha.heiljo.com'

再次执行

1
echo {} | ssh -vvv phabricator@pha.heiljo.com -p 2221 conduit conduit.ping

发现可以正常使用了。

1
{"result":"los-basic","error_code":null,"error_info":null}

思考:

1 base-uri的配置并未写入到官方的文档中,不知道这算不算疏忽?

2 可以将所有的公钥到配置到管理员账号下,也可以配置到别的用户下,不影响