分享几个使用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)
搜到一个相关的链接:
"ignore SIGPIPE from ldap-helper. ssh server does not read whole input if matching key is found"
客户端和服务端都开启debug 模式,发现OpenSSH 在匹配AuthorizedKeysCommand 返回的公钥列表时,只要一读到匹配的公钥,就不会继续读了,应该是这个时候发送了一个信号,导致脚本退出状态异常。
注释掉set -e
就正常了。
至于为什么就这个区域的机器部分机器有问题,能力和精力都不足,搞不清楚了:(