保护SSH密钥

时间:2012-02-15 01:14:39

标签: security ssh

我有一台开发人员的机器,我设置了SSH密钥以允许他们访问服务器。 .ssh中的公钥和私钥显然对此人可见。

有没有办法保护这些钥匙?如果我不想将这些密钥复制到另一台服务器的可能性,我可以做什么吗?

默认情况下,ssh-agent在登录用户下运行,因此我可能无法取消用户对〜/ .ssh文件夹的访问权限。

谢谢, Tabrez

1 个答案:

答案 0 :(得分:1)

您希望允许开发人员使用该密钥,但不能复制它。

为此,您可以将密钥存储在开发人员无法完全访问权限的服务器上。实现这一目标的一种方法是:

  • 开发人员登录到存储密钥的特殊“密钥管理者”服务器。他们可以使用不同的SSH密钥(不是您要控制的密钥),密码,某种形式的双因素身份验证或您选择SSH支持的任何其他密钥登录此服务器。
  • 此服务器上的开发人员帐户配置了强制命令或受限制的shell,通过执行以下操作继续执行此过程:
    • 启动一个新的SSH代理(当然是在密钥管理服务器上运行)
    • 将受控密钥加载到该代理
    • 启用与其他服务器的ssh连接,并启用代理转发。
  • 开发人员登录到第二台服务器(他们必须拥有一个帐户)。第二台服务器可能是您已经运行的通用服务器。

开发人员现在可以通过使用密钥管理服务器上运行的代理从第二台服务器登录到其他位置,但是他们永远无法访问任何shell或机会来检查/复制密钥管理服务器上的文件。

此解决方案的问题在于,所有开发人员的会话都通过密钥管理服务器以及第二个共享服务器进行传输。如果密钥管理服务器是远程的,这可能是一个缺点。开发人员使用它将文件(SCP或SFTP)传回本地计算机也很困难且不直观。

另一种解决方案是编写软件,在开发人员的计算机上本地创建存根SSH代理服务器,通过专用连接将SSH代理请求转发给密钥管理服务器上的真实代理。通过一些工作,您可以设置与密钥管理服务器的专用连接(我自己建议使用SSH连接)在开发人员的机器上自动启动一个简单的子shell,它在其环境中具有stub ssh代理的套接字,因此他们可以“只使用它“,这个解决方案可以非常实用,用户友好。我自己做了这个,但它超出了Stackoverflow答案的范围。