Gitlab CI/CD连接远程VPS失败:连接被拒与主机密钥不匹配问题求解
解决GitLab CI/CD无法连接远程VPS的问题
问题根源是GitLab CI使用的Ubuntu镜像中,OpenSSH客户端默认仅提供sk-ecdsa-sha2-nistp256@openssh.com、sk-ssh-ed25519@openssh.com这类基于安全密钥的主机密钥类型,而你的VPS的sshd服务未启用或不支持这些类型,导致密钥协商失败,连接被拒绝。
以下是两种快速解决方法:
方法一:在SSH命令中指定兼容的主机密钥算法
修改.gitlab-ci.yaml中的script部分,在ssh命令后添加-o HostKeyAlgorithms参数,指定VPS支持的密钥类型(可在VPS上执行ssh -Q hostkey查看支持的类型,常见兼容类型包括rsa-sha2-256、rsa-sha2-512、ecdsa-sha2-nistp256、ssh-ed25519):
image: ubuntu before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' - eval $(ssh-agent -s) - echo "$SSH_KEY_VU2NW" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan (domain name here) >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts Test SSH: script: - ssh -o HostKeyAlgorithms=+rsa-sha2-256,rsa-sha2-512,ecdsa-sha2-nistp256 root@(IP address here)
方法二:通过SSH配置文件指定算法
在before_script中添加创建~/.ssh/config的步骤,统一配置目标主机的密钥算法:
image: ubuntu before_script: - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client git -y )' - eval $(ssh-agent -s) - echo "$SSH_KEY_VU2NW" | tr -d '\r' | ssh-add - - mkdir -p ~/.ssh - chmod 700 ~/.ssh - ssh-keyscan (domain name here) >> ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts # 添加SSH配置,指定兼容的主机密钥算法 - echo "Host (IP address here)" >> ~/.ssh/config - echo " HostKeyAlgorithms +rsa-sha2-256,rsa-sha2-512,ecdsa-sha2-nistp256,ssh-ed25519" >> ~/.ssh/config - chmod 600 ~/.ssh/config Test SSH: script: - ssh root@(IP address here)
备选方案:修改VPS的sshd配置(可选)
如果希望从服务器端解决,可修改VPS的/etc/ssh/sshd_config文件,确保启用了常见的主机密钥类型:
# 确保以下行存在(若注释则取消注释) HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
修改后重启sshd服务:
systemctl restart sshd
内容的提问来源于stack exchange,提问作者C.A. Vuyk
相关产品推荐
相关产品推荐

