【问题标题】:Gitlab CI/CD using ssh / knownhosts errorGitlab CI/CD 使用 ssh / knownhosts 错误
【发布时间】:2022-10-21 22:04:53
【问题描述】:

我正在尝试使用 gitlab CI/CD 在推送特定分支后自动部署我的代码(在我的情况下为“暂存”分支)

推送“暂存”分支后,我在 gitlab UI 的作业部分看到以下错误:

Running with gitlab-runner 15.0.0 (xxxxxx)
  on deploy xxxxxx
Preparing the "ssh" executor
00:36
Using SSH executor...
ERROR: Preparation failed: ssh command Connect() error: ssh Dial() error: ssh: handshake failed: knownhosts: key is unknown

我可以从我的 VM 中看到 gitlab,并且 gitlab-runner 之前注册成功。

我还创建了 ssh 密钥并将其添加到 gitlab-runner 安装步骤中。

【问题讨论】:

  • Dial() 部分表明这是使用 Go 的 ssh 实现。 “已知主机”的东西就是VonC said。命令行 ssh 可以被告知“首次使用时信任”,这实际上是通常的默认设置,因此如果您连接到 gitlab.com第一次, ssh 将读取来自gitlab.com 回答者的数据并将其保存在您的.ssh/known_hosts 文件中。没有但是,“首次使用时信任”,您必须预加载正确的主机密钥。
  • 然而,对于通常的 Go ssh Dial() 函数,主机密钥由 HostKeyCallback 函数处理(参见 the ClientConfig documentationthe HostKeyCallback documentation)。 gitlab-ci-runner 使用什么,我不知道。

标签: ssh gitlab ssh-keys gitlab-runner


【解决方案1】:

您需要检查在您的情况下使用的 SSH URL。

git@gitlab.com:me/myProject 这样的东西会在~/.ssh/known_hosts 文件中查找gitlab.com SSH host keys fingerprints

确保首先在 gitlab-runner 服务器中将以下内容添加到 ~/.ssh/known_hosts

gitlab.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAfuCHKVTjquxvt6CM6tdG4SLp1Btn/nOeHHE5UOzRdf
gitlab.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCsj2bNKTBSpIYDEGk9KxsGh3mySTRgMtXL583qmBpzeQ+jqCMRgBqB98u3z++J1sKlXHWfM9dyhSevkMwSbhoR8XIq/U0tCNyokEi/ueaBMCvbcTHhO7FcwzY92WK4Yt0aGROY5qX2UKSeOvuP4D6TPqKF1onrSzH9bx9XUf2lEdWT/ia1NEKjunUqu1xOB/StKDHMoX4/OKyIzuS0q/T1zOATthvasJFoPrAjkohTyaDUz2LN5JoH839hViyEG82yB+MjcFV5MU3N1l1QL3cVUCh93xSaua1N85qivl+siMkPGbO5xR/En4iEY6K2XPASUEMaieWVNTRCtJ4S8H+9
gitlab.com ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFSMqzJeV9rUzU4kWitGjeR4PWSa29SPqJ1fVkhtj3Hw9xjLVXVYrU9QlYWrOLXBpQ6KWjbjTDTdDkoohFzgbEY=

这将跳过 SSH 中的手动指纹确认。
换句话说,不再有“knownhosts: key is unknown”。


请注意,使用 GitLab 15.3(2022 年 8 月),您将更容易找到这些:

SSH 指纹的新链接

由于 SSH 配置页面和文档中的新链接,您的 GitLab SSH 指纹现在更容易找到。

感谢Andreas Deicha的贡献!

请参阅 DocumentationIssue

【讨论】:

  • 感谢您的帮助。我正在为公司使用完全不同的 gitlab(例如 gitlab.company.com)服务器。你能帮我吗,我怎样才能获得这个私人 gitlab 服务器的 ssh 主机密钥指纹?
  • @shahabvalizade 通常,第一个 ssh git@gitlab.company.com 会提示您接受密钥指纹,并自动更新~/.ssh/known_hosts。但是您必须要求管理员确认这些是正确的。
  • 我是栈。这对我不起作用。我不知道为什么。
  • @HasiburRahman 那么最好在一个单独的问题中描述您的问题。
  • 我也遇到同样的错误。您能否提供解决方案错误:“错误:准备失败:ssh 命令连接()错误:ssh 拨号()错误:ssh:握手失败:已知主机:密钥未知”@VonC
【解决方案2】:

对于仍然遇到此问题的人:在我们的案例中,原因是 known_host 文件中的主机名与 toml 文件中的主机名不同。他们必须都是完全合格的或都是不合格的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-15
    • 2020-07-06
    • 2021-04-17
    • 1970-01-01
    • 2021-12-22
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多