是否有PAM模块可以使用SSH质询响应对用户进行身份验证?
我试图编写一个支持PAM的应用程序,它基本上具有与SSH连接相同的身份验证过程。我一直无法找到已经执行此操作的PAM模块(pam_ssh模块仍然是基于密码的),所以我一直在尝试编写自己的模块。
但是,我找不到允许我以这种方式访问SSH的API。即使使用sshd的PAM模块,也似乎不是一种验证SSH公钥的简洁方法。
更明确一点,如果我为计算机上的给定用户提供SSH公钥(为简单起见,请考虑localhost),我想向该计算机上的该用户发送一个质询,以测试他们是否拥有该SSH密钥。有谁知道这样做的方法?
谢谢!
答案 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有自己的自定义格式,无法转换它们。