你怎么能做dynamic的,基于密钥的SSH类似于GitHub?

我不想为我的应用程序的用户提供SSH / RSYNCfunction。 我希望他们能够将SSH密钥粘贴/保存到我的应用程序类似于GitHub :

在这里输入图像说明

所以,我的问题是,一旦我让用户保存他们的关键(最好在数据库中):

有没有一种方法可以在不实际创buildLinux用户帐户的情况下提供/模仿SSH / RSYNCfunction? 我希望能够根据他们的数据库存储的公钥进行授权,并让他们在特定文件夹(例如,根据他们在应用程序中的用户名)进行RSYNCinput/输出。

(如果重要的话,它将是部署到Ubuntu服务器的Rails应用程序)

查看SSH的authorized_keys-file命令。 通过这种方式,您可以根据用户的SSH密钥强制访问您的计算机的特定用户的命令。

想象一下你的服务器上有一个名为“git”的用户。 此用户具有以下authorized_keys文件作为示例:

 command="/path/to/script user1",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user1] command="/path/to/script user2",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [public key of user2] 

所以当user1运行ssh [email protected] "/execute/command --with --parameter"/path/to/script被调用(作为git用户)。 此脚本可以访问环境variables$ SSH_ORIGINAL_COMMAND中的原始命令( /execute/command --with --parameter )(有关更多详细信息,请参阅SSH文档)。

这样,只需要将正确的行写入authorized_keys文件(可以使用存储在数据库中的键来dynamic构build文件)。

从那里你可以编写你自己的shell或者用你最初的命令做任何你想做的事情。

这基本上是如何gitolite和gitosispipe理git存储库的权限(Github使用其中的一个我认为)。

希望这有助于一点点的问候!

OP特别指出,他想把密钥分配给多个用户,而且他希望将用户存储在数据库中,而不是像实际的Linux用户那样。 在上面提到的Github风格的设置中,有一个git用户。

为了使答案完整,OP还需要使用AuthorizedKeyCommand指令,在这里已经很好地解释了 – OpenSSH和数据库中的公钥

所以,你使用两者的组合。 存储在数据库中的x个用户的服务器身份validation通过。 基于一个自定义的身份validation脚本(一个bash脚本,你可以从你的web应用程序中调用一些脚本)

当您的自定义脚本将公钥返回给OpenSSH进行身份validation(代替authorized_keys文件)时,您可以使用Michael Trojanek的答案中所述的格式提供它。 这样,您就可以通过您的dynamic用户可以访问的特定function提供授权。