2012-02-15 165 views
1

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

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

默认情况下,ssh-agent以登录用户身份运行,所以我可能无法拿走用户对〜/ .ssh文件夹的访问权限。

感谢, Tabrez

+1

不,如果您将密钥存储在文件中,则无关紧要。如果密钥存储在硬件(智能卡)中,有方法可以防止复制。 – Zoredache 2012-02-15 01:20:48

+0

SSH并不意味着限制基于机器的访问 – madth3 2012-02-15 01:39:23

+1

我认为你可以检查'man sshd_config'并配置'HostCertificate'和/或'Match'来限制用户到特定的外出主机。 – nicerobot 2012-02-15 03:22:34

回答

1

你希望允许开发者使用的关键,但不能复制它。

为此,您可以将密钥存储在开发人员无法完全访问的服务器上。一种实现方式如下:

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

开发人员现在可以通过使用密钥托管服务器上运行的代理登录到从第二个服务器上的其他地方,但他们从来没有获得任何壳或机会检查/复制的关键文件托管服务器。

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

另一种解决方案将涉及编写软件开发者的机器转发SSH代理请求通过专用连接到一个真正的代理键托管服务器上本地创建一个存根SSH代理服务器功能。随着一点点的工作,你可以设置为关键托管服务器(本身SSH连接,我推荐)的专用连接自动启动开发人员的机器上一个简单的子shell有存根SSH代理的插座在它的环境,使他们能够“只使用它“,并且这个解决方案可以非常实用和用户友好。我自己做了这个,但它超出了Stackoverflow答案的范围。

+0

嗨Celada - 谢谢你的回应。我对远程机器没有问题,也没有将文件传输机制返回给开发人员的本地机器。我将如何去保护远程机器上的密钥(用户通过RDP或VNC登录)? ssh-agent以用户的权限运行,因此用户最终可以访问〜/ .ssh。 – Tabrez 2012-02-17 13:22:51

+0

用户不能控制代理或密钥文件本身,因为它们不允许获取s​​hell或在密钥管理者上运行任意程序。当他们登录到密钥管理员时,他们被强制转到受限制的shell。 – Celada 2012-02-20 19:58:30