我如何安排一个密码短语encryption和ssh代理程序可用于Windows启动时的其他进程?

我正在通过持续集成(TeamCity构build代理)在Windows环境中设置应用程序的自动化部署,并使用cygwin + openssh来执行远程执行部分 – 我基本上使用ruby的capistrano和一堆定制任务。

由于构build代理程序正在作为Windows服务运行,因此它是无头的。 该框不与用户login,所以当(例如)加载钥匙串或选美器时,用户没有机会键入密钥的密码。

所以目前,这个密码在部署脚本中是硬编码的 – 我的意思是说,在一个地方,所以它不是分散的,但是,似乎必须有一个更安全的方法来做到这一点。

谁能告诉我这是什么? 🙂

  • 我真的不想使用密码。
  • 我更喜欢每次重新启动时都不必手动login到构build代理,以便执行一些步骤来为每个密码提供密钥,以便可以加载密钥。

更新:

  • 我select使用密码键,因为它似乎本质上更安全,直到我后来碰到了如何解锁无头过程的钥匙的障碍。 这个想法是,只有拥有密钥密码的人才能够部署。 也许我需要CI构build代理使用的一个(密切控制的)密码短语密钥和一个供人类使用的密码短语?

在Windows环境中的SSH是一个不寻常的select。 大多数人会使用WMI来部署应用程序和pipe理远程系统。 Jenkins-CI(以前的Hudson-CI)很好地利用了WMI来实现这个目的,所以看看这个例子。

但是,您使用的是SSH,所以我build议您在不使用密码的情况下生成SSH密钥。

与窃取或猜测正规密码相比,这将更难承担或猜测(未encryption的)SSH密钥。

将未encryption的SSH与IP限制和日志监视相结合,以便您立即知道某人是否偷了密钥并尝试使用被盗密钥从另一台主机login。

如果您还没有:考虑一个devise,允许您的高价值主机连接到您的应用程序节点,而不是相反。

如果您的(公开的)节点通过SSH连接到中央服务器以进行应用程序更新,请考虑使用ForcedCommand和ChrootDirectory来限制尝试使用应用程序节点攻击您的黄金主机的攻击者有多less数据可用。