Gitlab 自动部署已停止工作,服务器日志中出现“找不到匹配的主机密钥类型”错误

Posted

技术标签:

【中文标题】Gitlab 自动部署已停止工作,服务器日志中出现“找不到匹配的主机密钥类型”错误【英文标题】:Gitlab autodeploy has stopped working, "no matching host key type found" error in server logs 【发布时间】:2021-10-25 19:32:59 【问题描述】:

我有 .gitlab-ci.yml:

image: php:latest
deploy:
  stage: deploy
  only:
    - master
  before_script:
    - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_KEY" | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - ssh-keyscan $SSH_HOST > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    - ssh $SSH_USER@$SSH_HOST "cd $SSH_PATH && git pull origin master"

它工作了几个月,但大约一周前停止工作,尽管服务器上没有任何变化。

管道失败的作业日志:

# mydomainproject.com:22 SSH-2.0-OpenSSH_7.6p1 Ubuntu-4ubuntu0.5
$ chmod 644 ~/.ssh/known_hosts
$ ssh $SSH_USER@$SSH_HOST "cd $SSH_PATH && git pull origin master"
ssh: connect to host mydomainproject.com port 22: Connection refused
Cleaning up file based variables
ERROR: Job failed: exit code 1

/var/log/auth.log 在服务器上:

sshd[23927]: Connection closed by 35.227.7.98 port 50036 [preauth]
sshd[23925]: Connection closed by 35.227.7.98 port 50038 [preauth]
sshd[23924]: Connection closed by 35.227.7.98 port 50040 [preauth]
sshd[23928]: Unable to negotiate with 35.227.7.98 port 50042: no matching host key type found. Their offer: sk-ecdsa-sha2-nistp256@openssh.com [preauth]
sshd[23926]: Unable to negotiate with 35.227.7.98 port 50044: no matching host key type found. Their offer: sk-ssh-ed25519@openssh.com [preauth]

我已阅读 this 并尝试编辑 .gitlab-ci.yml:

script:
    - ssh -oHostKeyAlgorithms=+sk-ecdsa-sha2-nistp256@openssh.com $SSH_USER@$SSH_HOST "cd $SSH_PATH && git pull origin master"

没用,结果还是一样。

我不明白出了什么问题以及它为什么停止工作。

【问题讨论】:

【参考方案1】:

你也试过ssh -oHostKeyAlgorithms=+ssh-dss吗?

这是 OpenSSH 旧版 documentation 中描述的一个已知问题,即使出于安全原因不建议使用此解决方法。

【讨论】:

是的,这是我尝试的第一件事。结果是一样的。 从 gitlab runner 到目标服务器的ssh -vvv 给了你一些提示? ~/.ssh/config 客户端发生了变化?升级我的笔记本电脑后,我遇到了类似的问题,我解决了将PubkeyAcceptedKeyTypes ssh-rsa,rsa-sha2-256,rsa-sha2-512 添加到~/.ssh/config 文件。 > 从 gitlab runner 到目标服务器的 ssh -vvv 给你一些提示?不,只是“连接被拒绝”。 > ~/.ssh/config 客户端改变了吗?不,它没有。 > 将 PubkeyAcceptedKeyTypes ssh-rsa,rsa-sha2-256,rsa-sha2-512 添加到我试过的~/.ssh/config 文件中,没有变化。【参考方案2】:

如果其他人有这个问题,对我来说它有助于手动指定主机密钥,而不是尝试让 gitlab 运行程序使用 ssh-keyscan 即时确定它。

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Gitlab 自动部署已停止工作,服务器日志中出现“找不到匹配的主机密钥类型”错误的主要内容,如果未能解决你的问题,请参考以下文章

gitlab根据hook钩子自动化部署

WINDOWS 服务主进程已停止工作?

c#写的winform生成EXE程序在有些电脑打不开,出现“程序已停止工作”的错误,错误日志如下:

gitlab+jenkins自动化上线部署持续集成

来自共享 Gitlab 运行器的 SSH 停止工作

我的docker随笔34:gitlab服务部署