gpt4 book ai didi

git - 使用 Jenkins 从 Ansible 中的 Bitbucket 获取时公钥被拒绝

转载 作者:行者123 更新时间:2023-12-02 14:13:56 25 4
gpt4 key购买 nike

我正在尝试做的事情:

我有一个 Ansible 脚本,它从 Bitbucket 执行 git 克隆,我正在通过 Ansible 插件从 jenkins 运行该脚本。

路线:

Jenkins server ---(ansible)---> App server ----(git)---> bitbucket.org

我正在尝试使用 Jenkins 服务器上的 ssh 私钥从 App 服务器连接到 Bitbucket 上的存储库,这应该可以在 ssh-agent 的帮助下实现.

出了什么问题:

Ansible 脚本无法使用 Public key denied 连接到 Bitbucket .

我检查过的内容:
  • Jenkins 上的公钥已添加到部署 key 列表中,它确实可以在没有权限问题的情况下工作。
  • ssh-agent在 jenkins 节点上运行,并且已添加 jenkins 上的私钥。
  • AllowFowardAgent已设置为 yes在服务器上。
  • jenkins 的 ansible 插件将私钥复制到 /tmp并在运行剧本时使用它。这与我所拥有的文件路径不同ssh-add -ed,但我认为这不会导致问题。

  • Jenkins 代码

    在运行 Ansible 任务之前,我首先运行以下 shell 脚本:
    eval `ssh-agent -s`
    ssh-add ~/.ssh/id_rsa

    cat >~/.ssh/config <<EOL
    Host *
    ForwardAgent yes
    EOL

    cat ~/.ssh/config

    git clone git@bitbucket.org:myuser/myrepo.git

    Ansible 代码

    我的剧本:
    - name: check SSH_AUTH_SOCK
    shell: echo "$SSH_AUTH_SOCK"

    - name: check ssh-agent forwarding
    shell: ssh -T git@bitbucket.org

    我的 ansible.cfg :
    [ssh_connection]
    ssh_args = -o ForwardAgent=yes -o StrictHostKeyChecking=no -C -o ControlMaster=auto -o ControlPersist=60s

    输出

    在我的 Ansible 脚本中,我可以看到 SSH_AUTH_SOCK设置:
    11:29:04 changed: [testserver] => {"changed": true, "cmd": "echo \"$SSH_AUTH_SOCK\"", "delta": "0:00:00.007881", "end": "2016-09-06 11:29:04.576963", "invocation": {"module_args": {"_raw_params": "echo \"$SSH_AUTH_SOCK\"", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 0, "start": "2016-09-06 11:29:04.569082", "stderr": "", "stdout": "/tmp/ssh-WnmHgtzMBS/agent.13630", "stdout_lines": ["/tmp/ssh-WnmHgtzMBS/agent.13630"], "warnings": []}

    但是 ssh -T git@bitbucket.org失败:
    11:29:09 fatal: [testserver]: FAILED! => {"changed": true, "cmd": "ssh -T git@bitbucket.org", "delta": "0:00:05.009720", "end": "2016-09-06 11:29:09.879430", "failed": true, "invocation": {"module_args": {"_raw_params": "ssh -T git@bitbucket.org", "_uses_shell": true, "chdir": null, "creates": null, "executable": null, "removes": null, "warn": true}, "module_name": "command"}, "rc": 255, "start": "2016-09-06 11:29:04.869710", "stderr": "Error reading response length from authentication socket.\r\nPermission denied (publickey).", "stdout": "", "stdout_lines": [], "warnings": []}

    最佳答案

    当你执行 ssh-agent -s它输出 SSH 的代理转发功能所需的一系列环境变量,例如:

    SSH_AUTH_SOCK=/var/folders/nw/2vnhg_gj77v_cyfv0p1vdfj80000gn/T//ssh-alCh0yLKdoci/agent.53532; export SSH_AUTH_SOCK; SSH_AGENT_PID=53533; export SSH_AGENT_PID; echo Agent pid 53533;

    当您通过 eval 运行它时这些命令在当前 shell session 中执行,您可以看到最后一个 ( echo) 的输出:
    Agent pid 53533

    然而,环境变量是为当前进程和子进程设置的。如果您从不同的进程调用 Ansible playbook,它们将不会被看到。

    正如您已经知道的那样,Jenkins 的 SSH 代理插件会注意其他进程(如 Ansible 插件)将继承这些环境变量。

    关于git - 使用 Jenkins 从 Ansible 中的 Bitbucket 获取时公钥被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39340451/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com