添加到 SSH 已知主机
Travis CI 可以在克隆 Git 存储库之前将条目添加到 ~/.ssh/known_hosts
,如果存在来自 github.com
、gist.github.com
或 ssh.github.com
以外域名的 Git 子模块,则需要此操作。
主机名和 IP 地址都受支持,因为密钥是通过 ssh-keyscan
添加的。可以像这样指定单个主机
addons:
ssh_known_hosts: git.example.com
可以将多个主机或 IP 添加为列表
addons:
ssh_known_hosts:
- git.example.com
- 111.22.33.44
还可以指定带端口的主机
addons:
ssh_known_hosts: git.example.com:1234
安全影响 #
请注意,ssh_known_hosts
选项可能会为您的构建引入中间人攻击的风险。(另请参阅 ssh-keyscan 手册页 的“安全”部分。)例如,它可能会阻止构建检测到非法第三方尝试将修改后的 Git 存储库或子模块注入到构建中。这种可能性在 Travis CI 构建输出用于发布包或生产部署时可能特别相关。
缓解措施和解决方法 #
目前,Travis CI 仅针对 github.com
、gist.github.com
或 ssh.github.com
上的存储库开箱即用地检测上述攻击。如果您在其他域上托管代码,目前没有使用 ssh_known_hosts
选项及其安全影响的简单替代方法。
但是,您可以保护构建阶段中克隆阶段后发生的其它 SSH 连接,例如,在部署构建输出时。要使您的构建拒绝此类连接的伪造 SSH 服务器,您可以使用已知的良好 SSH 密钥配置它们。假设您的构建实例连接到 SSH 服务器 ssh.example.com
-
删除 ssh.example.com 的
ssh_known_hosts
选项。 -
获取 ssh.example.com 上 SSH 服务器的公钥
-
理想情况下(但很少见),ssh.example.com 的所有者可以通过电子邮件或其他受信任的渠道为您提供服务器的 SSH 公钥。
-
如果您以前从受信任的本地计算机连接到 ssh.example.com,请运行
ssh-keygen -F ssh.example.com
以显示其公钥。 -
如果您尚未连接到 ssh.example.com,请运行
ssh-keyscan ssh.example.com
以检索它,并运行ssh-keygen -F ssh.example.com
以显示它。理想情况下,您需要与 ssh.example.com 的所有者仔细核实,以确保它确实是服务器的公钥,而不是 ssh.example.com 的伪造实例的密钥。
-
-
配置 Travis CI 以使用 SSH 服务器的公钥:将密钥服务器的公钥 KEY 添加到 SSH
known_hosts
文件中,例如,在安装阶段添加以下内容
install:
- echo 'KEY' >> $HOME/.ssh/known_hosts
确保将 KEY 替换为包含 SSH 服务器公钥的完整文本行,如上一步中获取的那样。