Continuous integration gitlab连续部署私钥安全性

Continuous integration gitlab连续部署私钥安全性,continuous-integration,gitlab,continuous-deployment,Continuous Integration,Gitlab,Continuous Deployment,我正在从事一个php项目 我有两台服务器: - gitlab server - production server (apache2 + php + mysql) 我的PHP源文件存储在我的gitlab服务器上并进行版本控制。 我想自动将php文件部署到生产服务器 以下是我所做的: -我已经在生产服务器上创建了一个“deployer”用户。 -我已经为此用户运行了ssh密钥生成。 -我将ssh私钥(/home/deployer/.ssh/id_rsa)复制并粘贴到gitlab秘密变量中 以下是

我正在从事一个php项目

我有两台服务器:

- gitlab server
- production server (apache2 + php + mysql)
我的PHP源文件存储在我的gitlab服务器上并进行版本控制。 我想自动将php文件部署到生产服务器

以下是我所做的: -我已经在生产服务器上创建了一个“deployer”用户。 -我已经为此用户运行了ssh密钥生成。 -我将ssh私钥(/home/deployer/.ssh/id_rsa)复制并粘贴到gitlab秘密变量中

以下是.gitlab-ci.yml文件的摘录:

deploy:
  stage: deploy
  when: manual
  only:
  - master
  script:
  - echo "${SSH_PRIVATE_KEY}" > id_rsa
  - chmod go-rwx ./id_rsa
  - rsync -hrvz --delete --exclude '.git*' --exclude id_rsa -e 'ssh -o StrictHostKeyChecking=no -i ./id_rsa' ./ deployer@productionservrer.com:/var/www/html
一切正常

我的问题是需要创建一个临时id_rsa文件来存储rsync的私钥。此文件已从rsync中排除,但我对此文件感到不安。如果有人意外删除了rsync--exclude选项,我的id_rsa文件将在Web服务器上公开

所以我的问题是,我如何工作而不必将私钥存储在临时文件中


谢谢

是否有理由在项目所在的文件夹中创建id\u rsa文件?如果您只需将id_rsa file prom项目文件夹移动到,例如,/home/local user/.ssh文件夹,您就不必担心意外复制了?很抱歉输入错误,从电话中写入…

这是真的,但是,如果有人破坏了你的gitlab服务器,以至于可以读取其他用户的600个文件,那么你的处境就糟糕得多,因为有人可以备份完整的gitlab,而你的代码或机密不再是机密。。。据我所知,您最初担心的是不会意外地将id_rsa泄漏到prod server,这是一个不同的主题,涉及面很广(从安全角度来看,高度依赖于您正在使用的gitlab Runner)…谢谢您的回答。你在项目中做什么?这是热门话题,但简而言之,我们使用的是Kubernetes跑步者。在gitlab中,我们还保留了与集群部署相关的秘密,但它们的实例对于运行者来说是短暂的,并且在运行者完成部署并终止时就消失了(所以不用担心在gitlab服务器上留下东西)。我相信docker runners会给你类似的行为。我们有两个阶段,每个阶段都有自己的运行程序——首先是从项目文件夹构建(这导致docker映像被推送到docker注册表),然后部署(根据分支将构建的映像部署到相同或不同的kubernetes群集)。事实上,我认为存在安全漏洞,即使id_rsa文件位于另一个文件夹中。此文件归gitlab runner用户所有。所有项目都有相同的用户。因此,其他用户可以在其.gitlab-ci.yml中创建一个脚本,该脚本将获取我的id_rsa文件。。。