当前位置: 首页 > news >正文

如何在 CI/CD 流程中安全使用 Git SSH Deploy Key

在 CI/CD 流程中SSH 密钥的安全使用取决于具体场景是用于拉取代码仓库还是用于登录远程服务器部署。最稳妥的做法是将私钥存进平台的加密变量Secrets配合专用密钥限制权限严禁硬编码。先说结论区分“仓库访问”与“服务器部署”两种场景私钥存入 CI/CD 平台 Secrets公钥配置到对应目标端。场景判断拉取代码用 Git 平台 Deploy Key部署服务器用服务器 SSH 密钥。核心操作生成独立密钥对私钥加密存储流水线动态加载。安全底线私钥权限 600目录 700禁止日志打印定期轮换。场景区分仓库访问 vs 服务器部署配置前必须明确密钥用途两者配置位置完全不同场景 A拉取私有代码仓库用途CI/CD 流水线需要克隆私有仓库或子模块。配置位置Git 平台GitHub/GitLab的 Deploy Keys 设置。权限通常只读若需推送需开启写权限有限制。场景 B部署到远程服务器用途流水线构建完成后通过 SSH 登录生产/测试服务器执行脚本。配置位置目标服务器的~/.ssh/authorized_keys。权限仅限特定用户登录建议配合 sudo 限制命令。第一步生成专用密钥不要使用默认的id_rsa生成专门用于 CI/CD 的密钥。Ed25519 算法比传统 RSA 更安全高效。ssh-keygen -t ed25519 -C ci-deploy-key -f ~/.ssh/id_ed25519_deploy生成后得到两个文件id_ed25519_deploy私钥和id_ed25519_deploy.pub公钥。第二步配置公钥分场景场景 AGit 平台 Deploy KeyGitHub进入仓库 Settings Deploy keys Add deploy key粘贴公钥内容。若需推送代码勾选 Allow write access。GitLab进入 Settings Repository Deploy Keys粘贴公钥。注意部署密钥触发的 Pipeline 权限可能受限。场景 B远程服务器登录将公钥内容追加到目标服务器对应用户的~/.ssh/authorized_keys文件中cat id_ed25519_deploy.pub | ssh userremote_host mkdir -p ~/.ssh cat ~/.ssh/authorized_keys第三步CI/CD 配置示例1. GitHub Actions 配置在仓库 Settings Secrets and variables Actions 中新建 Secret名为SSH_PRIVATE_KEY内容为私钥文件全文。name: Deploy via SSH on: [push] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkoutv3 - name: Setup SSH uses: webfactory/ssh-agentv0.5.3 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Verify Connection run: ssh -o StrictHostKeyCheckingno userremote_host echo Connected2. GitLab CI 配置在 Settings CI/CD Variables 中新建变量SSH_PRIVATE_KEY类型 File 或 Variable建议 masked。before_script: - eval $(ssh-agent -s) - echo $SSH_PRIVATE_KEY | tr -d \r | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh # 注意生产环境建议预先已知主机指纹避免中间人攻击 - ssh-keyscan -H remote_host ~/.ssh/known_hosts script: - ssh userremote_host cd /var/www git pull第四步验证与排查验证方法在流水线中添加测试步骤确认免密连接成功且无密码提示。仓库访问ssh -T gitgithub.com或git ls-remote gitgitlab.com:namespace/repo.git服务器部署ssh -i ~/.ssh/id_ed25519_deploy userremote_host echo ok常见错误排查Permission denied (publickey)检查私钥权限是否为 600chmod 600 key目录是否为 700。Known hosts 验证失败首次连接未知主机可能被拒绝需提前扫描或关闭严格检查StrictHostKeyCheckingno仅限内网。换行符错误存入 Secrets 时私钥换行符可能丢失脚本中建议使用tr -d \r处理。密钥泄露风险确保 CI/CD 平台开启了变量屏蔽Masked切勿在脚本中echo私钥内容。安全最佳实践最小权限原则Deploy Key 默认只读仅必要时开启写权限。服务器密钥建议限制authorized_keys命令选项如command...。密钥轮换建议每 6-12 个月轮换一次密钥旧密钥失效前更新 CI/CD 变量。避免中间人攻击生产环境尽量避免使用StrictHostKeyCheckingno建议将已知主机指纹硬编码到仓库或配置中。来源 https://www.zjcp.cc/ask/11199.html
http://www.rkmt.cn/news/1292672.html

相关文章:

  • 阅读APP书源一键导入终极指南:3种方法+26个高质量书源全解析
  • 郑州鼎建贸易:鹤壁专业的塑木栈道批发公司怎么联系 - LYL仔仔
  • 2026年AI招聘系统实战榜:从“筛简历”到“预判人”,谁是HR的救命稻草?
  • 用友 HR SaaS 八大 AI Agent:重塑企业人力资源管理的新引擎!
  • GHelper终极指南:3步掌握华硕笔记本性能控制秘籍
  • Geseq注释叶绿体基因组,结果比NCBI多了啥?手把手教你处理外显子与反式剪切基因
  • BepInEx IL2CPP启动失败终极解决方案:从框架加载异常到游戏稳定运行
  • Ollama客户端开发指南:构建本地大模型交互工具的核心原理与实践
  • 基于Web的Ollama客户端:本地大模型交互的图形化解决方案
  • Ubuntu 全面拥抱 Rust 后,我意识到 Rust 社区要变了
  • 3天掌握APK安装器:让Windows电脑变身安卓应用中心
  • SylixOS硬实时系统上ROS 2开发:从微秒级通信到一体化部署实战
  • 终极指南:如何在Windows上完美使用苹果触摸板?mac-precision-touchpad驱动完整教程
  • 终极指南:3步解锁Cursor Pro完整功能永久免费使用
  • macOS OBS虚拟摄像头深度技术解析:从原理到实战的专业指南
  • 南通鑫均信息科技:南通专业的复印设备维修公司找哪家 - LYL仔仔
  • 别再手动合并Excel了!用Kettle的‘Excel输入’组件,5分钟搞定多文件、多工作表数据抽取
  • Coolapk UWP:桌面端酷安社区体验的智能化革命
  • AISuperDomain:面向AI智能体的动态语义化服务路由系统设计与实践
  • 别再手动配环境了!用Docker Compose一键部署WordPress+MySQL(附完整docker-compose.yml)
  • 从手机到服务器:聊聊ARM架构的“白话文”革命,以及华为鲲鹏920如何用它搞定数据中心
  • AI应用开发利器:统一API网关localaipilot-api部署与实战指南
  • C++二叉树控制台可视化:从递归布局到层序遍历的图形化实现
  • Instagram自动化工具架构解析:从爬虫原理到Skill集成实战
  • 2026最新Claude Code 规范文件 CLAUDE.md 全面解析与超全模板
  • Altium Designer导出Gerber文件实战:从层设置到SMT坐标,一步一图搞定PCB打样
  • 北京积家表主血泪教训:月相盘里那轮“假月亮”调错一次毁机芯!亨得利技师亲授官方门店精准对月秘笈 - 亨得利官方维修中心
  • STK实战:对比BDS3与GPS,看北斗在亚太地区的覆盖与精度优势到底有多大?
  • ChampR深度解析:如何用智能助手提升英雄联盟游戏水平
  • SpinalHDL流水线设计:resulting与overloaded方法实战解析