首页 文章

使用SSH的PAM模块

提问于
浏览
0

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

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

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

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

谢谢!

1 回答

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

相关问题