gpt4 book ai didi

ssh - sudo_user 的 Ansible 和 ForwardAgent

转载 作者:行者123 更新时间:2023-12-04 13:13:38 27 4
gpt4 key购买 nike

有人可以说我,我做错了什么吗?我正在使用 Amazon EC2 实例并希望将代理转发给用户 rails,但是当我运行下一个任务时:

- acl: name={{ item }} etype=user entity=rails permissions=rwx state=present
with_items:
- "{{ ansible_env.SSH_AUTH_SOCK|dirname }}"
- "{{ ansible_env.SSH_AUTH_SOCK }}"
sudo: true

我看到失败的结果:
(item=/tmp/ssh-ULvzaZpq2U) => {"failed": true, "item": "/tmp/ssh-ULvzaZpq2U"}
msg: path not found or not accessible!

当我手动尝试它时,没有ansible,它看起来不错:
setfacl -m rails:rwx "$SSH_AUTH_SOCK"
setfacl -m rails:x $(dirname "$SSH_AUTH_SOCK")
sudo -u rails ssh -T git@github.com //Hi KELiON! You've successfully authenticated, but GitHub does not provide shell access.

我什至尝试运行新实例并运行测试 ansible playbook:
#!/usr/bin/env ansible-playbook
---
- hosts: all
remote_user: ubuntu
tasks:
- user: name=rails
sudo: true
- name: Add ssh agent line to sudoers
lineinfile:
dest: /etc/sudoers
state: present
regexp: SSH_AUTH_SOCK
line: Defaults env_keep += "SSH_AUTH_SOCK"
sudo: true
- acl: name={{ item }} etype=user entity=rails permissions=rwx state=present
with_items:
- "{{ ansible_env.SSH_AUTH_SOCK|dirname }}"
- "{{ ansible_env.SSH_AUTH_SOCK }}"
sudo: true
- name: Test that git ssh connection is working.
command: ssh -T git@github.com
sudo: true
sudo_user: rails

ansible.cfg 是:
[ssh_connection]
pipelining=True
ssh_args=-o ForwardAgent=yes -o ControlMaster=auto -o ControlPersist=60s

[defaults]
sudo_flags=-HE
hostfile=staging

但同样的结果。有任何想法吗?

最佳答案

我遇到了同样的问题,并在 https://github.com/ansible/ansible/issues/7235#issuecomment-45842303 找到了答案

我的解决方案与他的略有不同,因为 acl 对我不起作用,所以我:

  • 更改 ansible.cfg:

  • [默认]
    sudo_flags=-HE
    [ssh_connection]
    # 注释掉:ssh_args = -o ForwardAgent=yes

  • 添加 tasks/ssh_agent_hack.yml 包含:

  • - 名称:“(ssh-agent hack:授予对 {{ deploy_user }} 的访问权限)”
    # SSH-agent 套接字只为当前用户转发(0700 文件)。让我们改变它
    # 见:https://github.com/ansible/ansible/issues/7235#issuecomment-45842303
    # 见:http://serverfault.com/questions/107187/ssh-agent-forwarding-and-sudo-to-another-user
    变成:假
    文件:group={{deploy_user}} mode=g+rwx path={{item}}
    with_items:
    - "{{ ansible_env.SSH_AUTH_SOCK|目录名}}"
    - "{{ ansible_env.SSH_AUTH_SOCK }}"

    注意 - become: false 设置是因为我以 root 身份登录 - 如果您以其他身份登录,那么您将需要成为 root 来进行修复,然后在下面成为您的 deploy_user(如果它不是您正在登录的用户)在作为)。
  • 然后从我的 deploy.yml 剧本中调用它:

  • - 主机:应用程序
    collect_facts: 真
    变成:真的
    成为用户:“{{deploy_user}}”
    前置任务:
    - 包括:tasks/ssh_agent_hack.yml
    标签: ['部署']
    角色:
    - { 角色:carlosbuenosvinos.ansistrano-deploy,标签:['deploy'] }

    旁注 - 向 ~/.ssh/config 中的主机条目添加 ForwardAgent yes 不会影响什么工作(我尝试了所有 8 种组合:- 只设置 sudo_flags 但不设置 ssh_args 工作但如果你设置转发或在 ~/.ssh/config for opensssh 中关闭 - 在 ubuntu trusty 下测试)

    另请注意:我在 ansible.cfg 中有 pipelining=True

    关于ssh - sudo_user 的 Ansible 和 ForwardAgent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32091956/

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