使用 SSH 的 PAM 模块

PAM module that uses SSH

是否有 PAM 模块可以通过 SSH 质询-响应对用户进行身份验证?

我正在尝试编写一个 PAM 感知应用程序,它基本上具有与 SSH 连接相同的身份验证过程。我一直无法找到已经执行此操作的 PAM 模块(pam_ssh 模块仍然是基于密码的),所以我一直在尝试编写自己的模块。

但是,我找不到 API 允许我以这种方式访问​​ SSH。即使使用用于 sshd 的 PAM 模块,似乎也没有一种干净的方法来验证 SSH public 密钥。

更明确地说,如果我获得了一台机器上给定用户的 SSH public 密钥(为简单起见,请考虑本地主机),我想向该机器上的该用户发送质询以进行测试如果他们拥有该 SSH 密钥。有谁知道这样做的方法吗?

谢谢!

您可以使用 public 密钥加密一些随机数据,将其发送给用户,并断言他们能够使用私钥对其进行解密。如果您使用的是 RSA 密钥,则可以使用 OpenSSL 执行 encryption/decryption。例如,

# server
$ ssh-keygen -e -m PKCS8 -f ~/.ssh/id_rsa.pub >pub.pem
$ openssl rsautl -pubin -inkey pub.pem -encrypt -pkcs -in random -out encrypted

# client
$ openssl rsautl -inkey ~/.ssh/id_rsa -decrypt -in encrypted -out random

并验证客户端是否能够使用 random 的正确内容进行回复。

这些命令的灵感来自 jass,您可以使用它来代替 ssh-keygen+openssl

不幸的是,这不适用于 Ed25519 密钥; OpenSSH 有自己的自定义格式,无法转换它们。