fangpsh's blog

关于OpenSSH AuthorizedKeysCommand 的几个小问题

分享几个使用AuthorizedKeysCommand 遇到的问题。

关闭SELinux

... error: AuthorizedKeysCommand ...  returned status 126

如果没有关闭,可能会遇到奇怪的问题,手动调用脚本能成功,实际sshd 日志报error status 126。 如果安装了setroubleshoot,可以看到详细的信息。

公钥列表似乎有大小限制?

应该是四五年前了,在之前公司一开始脚本里面通过curl 拿到结果直接输出到标准输出。有一天某些同学反应登录不上某台机器,登录其他机器正常。 开始了漫长的排查过程,后来搜索到一封邮件AuthorizedKeysCommand size issue?,上异常机器执行了下脚本,输出的公钥列表确实很长。 改下脚本,下把curl 拿到的公钥列表先存到临时文件中(mktemp),再cat,果然好了。。。

status 141

写shell 脚本,开头我一般都会加set -e,这个脚本也不例外。发现一个诧异的问题,在某云商某可用区,某些同学登录机器会间歇性失败。 日志显示:

...error: AuthorizedKeysCommand ... failed, status 141

141 的意思是:141 is SIGPIPE (128 indicating signal + SIGPIPE)

搜到一个相关的链接:

packages/openssh ignore SIGPIPE from ldap-helper. ssh server does not read whole input if matching key is found

"ignore SIGPIPE from ldap-helper. ssh server does not read whole input if matching key is found"

客户端和服务端都开启debug 模式,发现OpenSSH 在匹配AuthorizedKeysCommand 返回的公钥列表时,只要一读到匹配的公钥,就不会继续读了,应该是这个时候发送了一个信号,导致脚本退出状态异常。 注释掉set -e就正常了。

至于为什么就这个区域的机器部分机器有问题,能力和精力都不足,搞不清楚了:(