CircleCI通过SSH部署至远程服务器遇主机验证问题求助
解决CircleCI中scp部署时主机真实性验证导致的停滞问题
问题根源
第一次用SSH连接陌生主机时,系统会弹出交互提示要求确认主机指纹,但CircleCI的构建环境是无交互的,没法回应这个提示,直接导致部署流程卡壳。
解决办法
1. 提前把远程主机指纹写入known_hosts(最安全,生产环境推荐)
- 本地终端执行
ssh-keyscan <远程服务器IP/域名>,复制输出的完整指纹内容 - 在
.circleci/config.yml的deploy-web任务中,scp步骤前添加命令,将指纹写入构建环境的~/.ssh/known_hosts:
jobs: deploy-web: steps: # 你的其他构建步骤... - run: name: 配置远程主机信任指纹 command: | echo "<远程服务器IP/域名> ssh-rsa <刚才复制的指纹内容>" >> ~/.ssh/known_hosts - run: name: 执行scp部署 command: scp -r <本地要传输的文件路径> <远程用户名>@<远程服务器IP/域名>:<服务器目标路径>
替换命令里的占位符为实际的服务器信息和指纹内容即可。
2. 修改scp命令跳过验证(仅测试环境临时使用)
这个方法会跳过主机指纹验证,存在中间人攻击风险,生产环境禁止使用:
给scp命令添加-o StrictHostKeyChecking=no参数:
- run: name: 执行scp部署(跳过主机验证) command: scp -o StrictHostKeyChecking=no -r <本地文件路径> <远程用户>@<远程服务器IP/域名>:<目标路径>
3. 用CircleCI自带的Known Hosts功能自动管理
CircleCI支持直接配置受信任主机,自动处理指纹:
- 进入项目的「Settings」→「SSH Keys」页面
- 找到「Known Hosts」板块,点击「Add Hostname」
- 输入远程服务器的IP或域名,CircleCI会自动获取并保存其指纹
- 后续构建时,该主机会被自动信任,无需额外配置命令
内容的提问来源于stack exchange,提问作者lulliezy
相关产品推荐
相关产品推荐

