我很难完成这项工作:我有一个 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横幅消息发送。这意味着服务器或客户端都充当缓冲区,因为这些是信息性消息。
因此,解决方案是将消息作为提示发送,因为这会强制客户端在收到消息后立即打印它(然后丢弃用户答案)。
关于linux - 使用 pam_exec 进行 Azure 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43051327/