如何配置CircleCI的SSH key用于Ansible/SSH连接
CircleCI Ansible orb 配置SSH登录目标Worker VM方法
前置准备
- 先登录CircleCI对应项目的设置页,把两类敏感信息存到项目环境变量里:
- 目标Worker VM的完整SSH私钥(包含首尾的标识行、所有换行),变量名设为
ANSIBLE_SSH_PRIVATE_KEY - 目标Worker VM的可达IP地址(公网IP/和CircleCI runner打通的内网IP均可),变量名设为
TARGET_VM_IP
- 目标Worker VM的完整SSH私钥(包含首尾的标识行、所有换行),变量名设为
- 确认目标VM的安全组/防火墙放通了CircleCI执行节点的22端口入站规则,避免网络层拦截。
配置文件编写
在项目根目录的.circleci/config.yml里按以下结构编写:
version: 2.1 # 声明引用Ansible orb,版本号可根据实际需求替换为稳定版 orbs: ansible: orbss/ansible@4.1.0 jobs: deploy-via-ansible: executor: ansible/default steps: - checkout # 写入SSH私钥并配置权限 - run: name: 初始化SSH连接配置 command: | mkdir -p ~/.ssh echo "$ANSIBLE_SSH_PRIVATE_KEY" > ~/.ssh/vm_key chmod 600 ~/.ssh/vm_key cat >> ~/.ssh/config << EOF Host * StrictHostKeyChecking no UserKnownHostsFile /dev/null LogLevel ERROR EOF # 生成Ansible主机清单 - run: name: 生成目标主机inventory command: | cat > inventory.ini << EOF [worker_nodes] $TARGET_VM_IP ansible_user=替换为你的VM登录用户名 ansible_ssh_private_key_file=~/.ssh/vm_key EOF # 连通性校验(可选,建议首次配置保留) - run: name: Ansible连通性测试 command: | ansible all -m ping -i inventory.ini # 执行正式Ansible playbook - ansible/playbook: playbook: 替换为你的playbook文件路径,比如./deploy.yml inventory: inventory.ini workflows: deploy: jobs: - deploy-via-ansible
注意事项
- 绝对不要把SSH私钥、服务器IP这类敏感信息硬编码在config.yml文件里,必须通过CircleCI环境变量注入,避免泄露
- 如果目标VM的SSH服务不是默认22端口,在inventory的IP行后面追加
ansible_port=你的自定义端口参数即可 - 如果登录用户需要root权限执行操作,可以在playbook里配置
become: true,不要直接用root账号登录做日常操作 - 私钥文件必须设置600权限,否则SSH客户端会因为权限过宽拒绝读取密钥,导致连接失败
内容的提问来源于stack exchange,提问作者Jenia Be Nice Please
相关产品推荐
相关产品推荐

