You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gitlab自动部署失效,服务器日志报no matching host key type found错误

问题根因

  1. 你的CI配置使用了php:latest滚动更新标签,近期该镜像内置的OpenSSH客户端版本升级,新版OpenSSH默认废弃了传统主机密钥算法,仅主动向服务端提供sk-ecdsa-sha2-nistp256@openssh.com、sk-ssh-ed25519@openssh.com两种安全密钥类算法
  2. 你的目标服务器运行的是OpenSSH 7.6p1版本,该版本发布时未支持上述两种sk前缀的算法,双方密钥协商失败导致连接中断,你之前的修改逻辑完全颠倒:不需要让客户端新增支持sk类算法,而是要让客户端兼容服务端已有的传统算法

修复方案

方案一(推荐,一劳永逸)

修改.gitlab-ci.yml中deploy任务的两处配置,主动指定服务端支持的传统算法:

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-keyscan -H -t ecdsa-sha2-nistp256,ssh-ed25519,ssh-rsa $SSH_HOST > ~/.ssh/known_hosts
    - chmod 644 ~/.ssh/known_hosts
  script:
    # 修改ssh命令指定兼容传统主机密钥算法
    - ssh -o HostKeyAlgorithms=+ssh-rsa,ssh-ed25519,ecdsa-sha2-nistp256 $SSH_USER@$SSH_HOST "cd $SSH_PATH && git pull origin master"

方案二(临时兼容)

将镜像从滚动的latest标签替换为之前稳定运行的固定版本号标签,比如image: php:8.1,避免镜像自动升级带来的依赖版本变动。

内容的提问来源于stack exchange,提问作者Andrzej S.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 05:42:02