You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用带密码短语的SSH-key通过Ansible执行git pull遇权限拒绝问题排查

Ansible带密码短语SSH-key执行git pull权限拒绝问题排查

问题背景

使用Ansible通过带密码短语的SSH-key执行git pull时出现Permission denied (publickey)错误,已在本地启动ssh-agent并执行eval \ssh-agent -s`、ssh-add /root/.ssh/new_rsa`输入密码短语,但问题仍存在。

相关配置

Ansible Playbook

- hosts: testnew
  gather_facts: no
  become: yes
  tasks:
  - name: Git update
    git:
      key_file: /root/.ssh/new_rsa
      repo: git@bitbucket.org:Ads/ads.git
      dest: /path/
      accept_hostkey: yes
      remote: origin
      update: yes
      version: feature/out
    ignore_errors: yes

ansible.cfg配置

[defaults]
inventory=/etc/ansible/hosts
#transport = ssh
enable_task_debugger = False
host_key_checking = False
become_flags=-HE
ssh_args = -o ForwardAgent=yes -o ControlPath=/tmp/ssh-%r@%h:%p -o ControlMaster=auto -o ControlPersist=30s

报错信息

"msg": "Failed to download remote objects and refs:  git@bitbucket.org: Permission denied (publickey).\r\nfatal: Could not read from remote repository.\n\nPlease make sure you have the correct access rights\nand the repository exists.\n"

排查步骤

  • 检查密钥文件权限:SSH对密钥权限要求严格,确保目标机器上/root/.ssh/new_rsa权限为600,父目录/root/.ssh权限为700。可在Playbook中添加前置任务修正:

    - name: Fix SSH key permissions
      file:
        path: /root/.ssh/new_rsa
        mode: '0600'
    - name: Fix .ssh directory permissions
      file:
        path: /root/.ssh
        mode: '0700'
    
  • 验证become后的环境变量继承:become: yes切换到root时,需确保ssh-agent的环境变量(如SSH_AUTH_SOCK)被继承。可在git任务中显式传递环境变量:

    - name: Git update
      git:
        repo: git@bitbucket.org:Ads/ads.git
        dest: /path/
        accept_hostkey: yes
        remote: origin
        update: yes
        version: feature/out
      environment:
        SSH_AUTH_SOCK: "{{ ansible_env.SSH_AUTH_SOCK }}"
      ignore_errors: yes
    

    同时确认become_flags=-HE中的-E参数已生效(该参数用于保留原用户环境变量)。

  • 目标机器手动测试git命令:登录目标机器testnew,切换到root用户,执行git clone git@bitbucket.org:Ads/ads.git /tmp/test。若失败,说明问题不在Ansible:

    • 检查Bitbucket账号是否已添加该密钥的公钥;
    • 确认密钥对与Bitbucket配置的公钥匹配;
    • 测试ssh -T git@bitbucket.org验证SSH连接是否正常。
  • 检查SSH Agent转发是否生效:在目标机器执行ssh-add -l,若看不到本地添加的密钥,说明Agent转发未生效:

    • 确认ansible.cfg中的ssh_args = -o ForwardAgent=yes配置正确;
    • 检查目标机器sshd_config中AllowAgentForwarding是否设为yes(默认允许,若被修改需调整)。
  • 避免key_file与Agent转发冲突:若已启用Agent转发,可尝试移除git模块中的key_file参数,让git优先使用Agent中的密钥,避免参数冲突导致的权限问题。

  • 尝试使用普通用户执行:root用户的环境可能存在权限或配置异常,可切换为普通用户执行git操作,确保密钥在该用户的.ssh目录下且权限正确。


内容的提问来源于stack exchange,提问作者emdnk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 11:42:57