使用 SSH 的 PAM 模块
Posted
技术标签:
【中文标题】使用 SSH 的 PAM 模块【英文标题】:PAM module that uses SSH 【发布时间】:2018-06-27 21:39:05 【问题描述】:是否有 PAM 模块可以通过 SSH 质询-响应对用户进行身份验证?
我正在尝试编写一个 PAM 感知应用程序,该应用程序本质上具有与 SSH 连接相同的身份验证过程。我一直无法找到已经这样做的 PAM 模块(pam_ssh 模块仍然是基于密码的),所以我一直在尝试编写自己的。
但是,我找不到允许我以这种方式访问 SSH 的 API。即使使用 sshd 的 PAM 模块,似乎也没有一种干净的方式来验证 SSH 公钥。
更明确地说,如果我获得了机器上给定用户的 SSH 公钥(为简单起见,请考虑 localhost),我想向该机器上的该用户发送挑战,以测试他们是否拥有该 SSH 密钥.有谁知道这样做的方法吗?
谢谢!
【问题讨论】:
【参考方案1】:您可以使用公钥加密一些随机数据,将其发送给用户,并断言他们能够使用私钥对其进行解密。如果您使用 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 有自己的自定义格式,无法转换它们。
【讨论】:
谢谢!这种转换非常有帮助。有没有办法通过签名做到这一点,服务器向客户端发送消息,客户端对消息进行签名,然后服务器验证签名? 啊,快速浏览一下 rsautl 的手册页,回答了问题。再次感谢您的帮助!以上是关于使用 SSH 的 PAM 模块的主要内容,如果未能解决你的问题,请参考以下文章