【问题标题】:How to set up GoCD to handle private git repositories that use SSH keys for authentication?如何设置 GoCD 来处理使用 SSH 密钥进行身份验证的私有 git 存储库?
【发布时间】:2017-08-27 13:38:03
【问题描述】:

我有一个 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?

【问题讨论】:

    标签: git ssh continuous-integration go-cd


    【解决方案1】:

    在撰写此答案时,无法直接在 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 中的“检查连接”。它应该打印“连接正常”。

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

    【讨论】:

    • 您说“为每个运行代理的节点和用户生成密钥”。我的 go-agent 和 go-server 在同一台机器上,我已经将 go 用户的 pub 密钥添加到我的 git 服务器。如何为每个节点生成密钥,然后用它做什么?谢谢
    • 最后一步是什么?用生成的密钥连接到服务器?
    • @mik3fly-4steri5k 是的,连接到服务器,以便将其指纹保存在本地。
    【解决方案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. 如果尚不存在,请在此 .ssh 目录中创建一个 config 文件。

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

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

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

    【讨论】:

      【解决方案3】:

      如果您使用 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 密钥后尝试检查连接,它会显示连接正常!

      【讨论】:

        猜你喜欢
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 2015-10-20
        • 1970-01-01
        • 2020-10-19
        • 1970-01-01
        • 2017-08-22
        • 2016-04-16
        相关资源
        最近更新 更多