![OpenSSH 可以从 % 标记扩展的最大字符串是多少?](https://linux22.com/image/791187/OpenSSH%20%E5%8F%AF%E4%BB%A5%E4%BB%8E%20%25%20%E6%A0%87%E8%AE%B0%E6%89%A9%E5%B1%95%E7%9A%84%E6%9C%80%E5%A4%A7%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%98%AF%E5%A4%9A%E5%B0%91%EF%BC%9F.png)
我没有使用服务器上传统的 authorized_keys 文件,而是使用 sshd 通过以下方式调用的自定义密钥验证器:AuthorizedKeysCommand
选项。在 sshd_config 中,我可以指定此命令应将用户的公钥作为参数输入,如下所示:
AuthorizedKeysCommand /path/to/verifier %k
问题在于密钥编码了大量附加数据,因此可能非常大。如果密钥大于 4135 字节左右,sshd 会在扩展令牌时记录致命错误%k
:
sshd[5914]: fatal: percent_expand: string too long
我一直在梳理源代码percent_expand
我没有看到任何地方可能会遇到此错误。似乎string too long
对令牌大小有某种限制,但它是什么?它在哪里定义?
答案1
您使用的是较旧的 OpenSSH 版本,该版本恰好将整个扩展缓冲区限制为 4096 个八位字节。更新到 8.1 以上版本,无论如何你都应该。
您在源代码中找不到的消息已被删除switch percent_expand() to use sshbuf instead of a limited fixed buffer
- 请参阅OpenSSH-便携式和OpenBSD 上游