11

我有一个 git 存储库,它使用 SSH 密钥对用户进行身份验证,我想将该存储库用作 GoCD 材料。GoCD 给了我这个错误:

Error performing command: --- Command ---
git ls-remote ssh://git@server/repo.git refs/heads/master
--- Environment ---
{GIT_ALLOW_PROTOCOL=http:https:ssh:git:file:rsync}
--- INPUT ----

--OUTPUT ---

--- ERROR ---
STDERR: Host key verification failed.
STDERR: fatal: Could not read from remote repository.
STDERR: 
STDERR: Please make sure you have the correct access rights
STDERR: and the repository exists.
---

有什么办法可以将 SSH 密钥添加到 GoCD?

4

3 回答 3

16

在撰写此答案时,无法直接在 GoCD 中管理 SSH 密钥。要使其工作,您必须为 GoCD 服务器和所有代理生成 SSH 密钥,然后将它们添加到托管 git 存储库的服务器。您还可以将现有密钥复制到服务器和节点,但显然不建议这样做。

例如,使用标准 GoCD 服务器安装,您的系统中应该有“go”用户:

$ grep GoCD /etc/passwd
go:x:998:998:GoCD User:/var/go:/bin/bash

sudo 作为“go”用户并创建密钥

$ sudo su - go
$ ssh-keygen
...
$ ssh [server]
The authenticity of host '[server] ([1.3.3.7])' can't be established.
ECDSA key fingerprint is SHA256:Rxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[server]' (ECDSA) to the list of known hosts.
Permission denied (publickey,keyboard-interactive).

最后一步很重要,因为如果你不成功,GoCD 会给你同样的错误。

现在将您的密钥添加到 git 服务器并单击 GoCD 中的“检查连接”。它应该打印“连接正常”。

为运行代理的每个节点和用户生成密钥。

于 2017-04-02T18:42:44.813 回答
2

这适用于我使用 Windows 10、本地 GoCD 服务器和本地“私有”Bitbucket。(这是我的开发堆栈的一部分):

第一步:使用“普通”本地用户帐户验证操作。

  • 按照 Bitbucket 的正常 ssh 密钥生成方式创建 ssh 密钥,例如,ssh-keygen在本例中使用我们将其命名为yourprivatekeyfile

  • 将内容复制yourprivatekeyfile.pub到存储库配置部分中的新 Bitbucket 访问密钥中。(即参考https://confluence.atlassian.com/bitbucket/set-up-an-ssh-key-728138079.html

  • 编辑(如有必要,创建)本地用户的 ~/.ssh/config 文件以包含以下行

Host 127.0.0.1
    Preferredauthentications publickey
    IdentityFile ~/.ssh/yourprivatekeyfile
  • 确保您可以使用git clone ssh://git@127.0.0.1:7999/yourproject/yourrepo.git您的私有 git 存储库,这将验证该密钥是否适用于 Bitbucket 服务器。

第二步:让 GoCD 服务器使用你的密钥文件。本节假设您已经完成了 GoCD 服务器的“正常”安装,并且它作为本地系统帐户运行。

  1. 导航到您的本地系统帐户配置文件目录,可能是c:/Windows/System32/config/systemprofile.

  2. 如果尚不存在,请创建一个.ssh目录。

  3. 将您的私钥文件(如果您愿意,还可以包括公钥文件)复制/移动到此.ssh目录中。

  4. 如果尚不存在,请config在此.ssh目录中创建一个文件。

  5. 将您创建的本地用户文件的上述行复制config到此config文件中。(服务器条目的行应与本地用户config文件的行相同)

  6. 您的 GoCD 材料 (Git repo) 应该具有在 Bitbucket 克隆字段中为 SSH 操作提供的 ssh URL

  7. 在 Git 存储库材料的“测试连接”中,它应该以“连接正常”响应

于 2019-01-14T05:16:10.310 回答
0

如果您使用 Windows 机器托管 GoCD 服务器和代理,它不会在普通用户帐户下运行,而是在“本地系统帐户”下运行</p>

因此,即使您可以从 git bash(以当前用户身份登录)访问您的 git repo,GOCD 也无法访问。

因此,您需要为当前用户的本地系统帐户添加 SSH 密钥。

1.首先找到本地系统帐户的主目录(它不会驻留在 C:/Users 下)

2.使用任何远程管理工具查找主目录 - 如果您使用http://download.sysinternals.com/files/PSTools.zip

a) 以管理员身份解压并运行命令行

b)PsExec.exe -i -s cmd.exe -启动工具 c)运行 echo %userprofile% 获取主目录(例如:C:\Windows\system32\config\systemprofile)

3.现在您可以从当前用户复制 SSH 密钥文件或使用 ssh 命令创建一个新的。

在创建/复制 SSH 密钥后尝试检查连接,它将显示连接正常!

于 2018-10-10T07:25:41.107 回答