使用 pam_exec 的 Azure 身份验证

Azure authentication with pam_exec

我很难完成这项工作:我有一个 python 脚本可以执行所需的步骤以获得授权 URL。当我从终端 运行 这个脚本时,我从 Azure 收到这条消息:

To sign in, use a web browser to open the page https://aka.ms/devicelogin and enter the code <CODE> to authenticate.

然后,脚本将停止运行,直到您转到 URL 并进行身份验证或发生超时。返回的错误代码是 0(验证成功)或 1(验证失败)。

问题是:当我想使用这个脚本进行SSH认证时,我在/etc/pam.d/ssh:

中使用了这一行
auth sufficient pam_exec.so stdout <path to script>

这是行不通的:我再也没有取回 URL 进行身份验证,脚本就超时了。但是,如果我终止服务器中的 python 进程,那么我会在 ssh 客户端中得到 URL (尽管不再有用,因为该进程不存在)。

所以,似乎 pam_exec 转发了 python 进程的 stdio,但只有在它终止时,时间是没有用的。有人知道如何解决这个问题吗?也许使用另一个 pam 模块?谢谢!

好吧,我终于明白了整个问题。似乎SSH(我不知道是服务器还是客户端)将所有不是提示的消息打包在一起,并将它们作为SSH 横幅消息发送。这意味着服务器或客户端充当缓冲区,因为这些是信息性消息。

因此,解决方案是将消息作为提示发送,因为这会强制客户端在收到消息后立即打印它(然后丢弃用户回答)。