我正在通过持续集成(TeamCity构build代理)在Windows环境中设置应用程序的自动化部署,并使用cygwin + openssh来执行远程执行部分 – 我基本上使用ruby的capistrano和一堆定制任务。
由于构build代理程序正在作为Windows服务运行,因此它是无头的。 该框不与用户login,所以当(例如)加载钥匙串或选美器时,用户没有机会键入密钥的密码。
所以目前,这个密码在部署脚本中是硬编码的 – 我的意思是说,在一个地方,所以它不是分散的,但是,似乎必须有一个更安全的方法来做到这一点。
谁能告诉我这是什么? 🙂
更新:
在Windows环境中的SSH是一个不寻常的select。 大多数人会使用WMI来部署应用程序和pipe理远程系统。 Jenkins-CI(以前的Hudson-CI)很好地利用了WMI来实现这个目的,所以看看这个例子。
但是,您使用的是SSH,所以我build议您在不使用密码的情况下生成SSH密钥。
与窃取或猜测正规密码相比,这将更难承担或猜测(未encryption的)SSH密钥。
将未encryption的SSH与IP限制和日志监视相结合,以便您立即知道某人是否偷了密钥并尝试使用被盗密钥从另一台主机login。
如果您还没有:考虑一个devise,允许您的高价值主机连接到您的应用程序节点,而不是相反。
如果您的(公开的)节点通过SSH连接到中央服务器以进行应用程序更新,请考虑使用ForcedCommand和ChrootDirectory来限制尝试使用应用程序节点攻击您的黄金主机的攻击者有多less数据可用。