如何设置GoCD来处理使用SSH密钥进行身份验证的私有git存储库?

时间:2017-04-02 18:20:12

标签: git ssh continuous-integration go-cd

我有一个git存储库,使用SSH密钥对用户进行身份验证,我想将该repo用作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中吗?

3 个答案:

答案 0 :(得分:11)

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

例如,对于标准的GoCD服务器安装,您应该使用" go"系统中的用户:

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

sudo as a" 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。它应打印"连接正常。"。

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

答案 1 :(得分:1)

这对我使用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 Server的“常规”安装,并且它以本地系统帐户身份运行。

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

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

  3. 将私钥文件(如果需要,还可以将公钥文件)复制/移动到此.ssh目录中。

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

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

  6. 您的GoCD资料(Git存储库)应具有在SSH操作的Bitbucket克隆字段中提供的ssh URL

  7. 在Git回购材料的“测试连接”中,它应显示为“连接正常”

答案 2 :(得分:0)

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

因此,即使您可以从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密钥后尝试检查连接,它将显示连接成功!