使用SSH的PAM模块

时间:2018-01-18 18:04:46

标签: ssh ssh-keys openssh pam

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

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

但是,我找不到允许我以这种方式访问​​SSH的API。即使使用sshd的PAM模块,也似乎不是一种验证SSH公钥的简洁方法。

更明确一点,如果我为计算机上的给定用户提供SSH公钥(为简单起见,请考虑localhost),我想向该计算机上的该用户发送一个质询,以测试他们是否拥有该SSH密钥。有谁知道这样做的方法?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

# 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有自己的自定义格式,无法转换它们。