作业返回“主机密钥验证失败”。当我在 gitlab-ci

时间:2021-02-26 01:01:51

标签: git ssh gitlab gitlab-ci gitlab-ci-runner

我试图通过 ssh 部署 master 分支,但在执行以下步骤后:https://medium.com/@hfally/a-gitlab-ci-config-to-deploy-to-your-server-via-ssh-43bf3cf93775 got:

image

我的脚本:

before_script:
  - sudo apt-get update -qq
  - sudo apt-get install -qq git
  # Setup SSH deploy keys
  - 'which ssh-agent || (sudo apt-get install -qq openssh-client )'
  - eval $(ssh-agent -s)
  - ssh-add <(echo "$SSH_PRIVATE_KEY")
  - mkdir -p ~/.ssh
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
    
deploy_staging:
  type: deploy
  environment:
    name: staging
    url: serverIp
  script:
    - ssh -t -t user@serverIp "cd var/www/ && git checkout master && git pull origin master && exit"
  only:
    - master

是的,我已经生成了一个私有 ssh 密钥,将它保存在 SSH_PRIVATE_KEY 变量中,我去了 ~/.ssh/authorized_keys 并将公钥放在那里,我已经进入了安装了 Runner 的服务器并且给了ssh user@serverIp并输入,但是在pipeline里面总是报错,我什至考虑把ssh-keygen放到pipeline中,但是因为需要输入,所以没用

注意:

  • 我更改了“serverIp”和用户的真实 ip 只是为了说明
  • 我不会说英语,所以我用了谷歌翻译,可能是文字混淆了。

1 个答案:

答案 0 :(得分:1)

我不建议关闭 hostKeyVerification,因为您想确定要连接到哪个服务器等。

相反,我建议配置一个名为 KNOWN_HOSTS 的 CI 变量,其中包含以新行分隔的所有主机名,例如

host1.com
host2.com

如果设置了环境变量,您可以在 .gitlab-ci.yml 中添加以下脚本以自动添加主机密钥。它使用 ssh-keyscan 将所有密钥添加到您的已知主机文件中。

- echo "Configuring known hosts based on the CI Variable `KNOWN_HOSTS`"
- |
  [[ ! -z "$KNOWN_HOSTS" ]] && echo "$KNOWN_HOSTS" | xargs -n 1 -I '{}' ssh-keyscan '{}' >> $HOME/.ssh/known_hosts || echo "KNOWN_HOSTS not set"