Delegate_to를 풀고 Ansible 회원이 되는 방법은 무엇입니까? (ssh를 연결하기 위해 어떻게 사용합니까?)

Delegate_to를 풀고 Ansible 회원이 되는 방법은 무엇입니까? (ssh를 연결하기 위해 어떻게 사용합니까?)

현재 디렉터리의 다음 레이아웃을 고려하세요.

.
├── foobar.yml
└── roles
    └── foobar
        └── tasks
            └── main.yml

foobar우리 캐릭터( )가 다음과 같은 작업을 수행한다고 가정해 보겠습니다 roles/foobar/tasks/main.yml.

---

- add_host:
    name: "baz"
    ansible_user: "root"
    ansible_become: yes
    ansible_ssh_host: "{{container.ip}}"
    ansible_ssh_host_key_checking: no
    ansible_ssh_private_key_file: "{{container.privkey}}"
    ansible_ssh_extra_args: "-o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null"

- wait_for:
    port: 22
    host: "{{container.ip}}"
    timeout: 30
    search_regex: OpenSSH

- apt:
    pkg:
      - vim-nox
      - lsof
  delegate_to: "baz"
  become: true
  become_user: root

...그리고 다음 스크립트는 다음과 같습니다.

---

- name: Configuring container and host
  hosts: localhost
  vars:
    container:
      ip: "172.17.0.2"
      privkey: "/root/root_ssh/id_rsa"
  roles:
    - foobar

OpenSSH는 플레이북에 제공된 대로 IPv4에서 사용할 수 있으며 개인 키는 지정된 경로( u=rw,go=예: 0600, 상위 디렉터리는 0700)에 존재합니다. 테스트하는 동안 이러한 사항을 모두 확인했습니다(예: stat및 사용 debug).

마지막 작업은 다음과 같이 실패했습니다.

TASK [foobar : apt] ***********************************************************************************************************************************************************************************************
task path: /home/username/ansible/test/roles/foobar/tasks/main.yml:18
<172.17.0.2> ESTABLISH SSH CONNECTION FOR USER: root
<172.17.0.2> SSH: EXEC ssh -C -o ControlMaster=auto -o ControlPersist=60s -o 'IdentityFile="/root/root_ssh/id_rsa"' -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o 'User="root"' -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o ControlPath=/home/username/.ansible/cp/0689044634 172.17.0.2 '/bin/sh -c '"'"'echo ~root && sleep 0'"'"''
<172.17.0.2> (255, '', "Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.\r\nno such identity: /root/root_ssh/id_rsa: Permission denied\r\[email protected]: Permission denied (publickey).\r\n")
fatal: [localhost]: UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.\r\nno such identity: /root/root_ssh/id_rsa: Permission denied\r\[email protected]: Permission denied (publickey).",
    "unreachable": true
}

출력은 ssh다음과 같습니다

Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
no such identity: /root/root_ssh/id_rsa: Permission denied
[email protected]: Permission denied (publickey).

ssh... 나 자신과 마찬가지로 명령줄에서 동일한 명령을 실행할 때도 sudo이 메시지가 표시됩니다 (예: ). 여기서 오류가 발생하는 이유는 /root/root_ssh/id_rsa실제 사용자가 액세스할 수 없기 때문입니다 ssh. 동등한 명령을 사용하여 sudo호출 하면 ssh매력처럼 작동합니다.

그러나 개인 키에 접근하려면 ssh먼저 개인 키를 호출해야 합니다 root.

묻다:그렇다면 Ansible을 어떻게 사용할 수 있나요?become 동시에 생성연결 ssh(예: 다음 ssh으로 실행 root)하시겠습니까?


앤서블 버전

$ ansible-playbook --version
ansible-playbook 2.9.4
  config file = /home/username/ansible/precitec/ansible.cfg
  configured module search path = [u'/home/username/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/dist-packages/ansible
  executable location = /usr/bin/ansible-playbook
  python version = 2.7.17 (default, Nov  7 2019, 10:07:09) [GCC 7.4.0]

내가 시도한 것

  • 작업을become 완료하세요add_host
  • Ansible이 호출에 sudo를 사용하도록 강제하는 설정 ansible_ssh_executable: "/usr/bin/sudo -- /usr/bin/ssh"(및 이들의 조합) 아쉽게도 Ansible은 결국 Paramiko를 사용하게 됩니다.sudo -- sshssh
  • ...창의력을 발휘하고 설정하세요 ansible_ssh_executable( ansible_ssh_args아래 참조).
  • apt태스크를 사용하고 있는 위치로 태스크를 이동 block하되 외부 블록은aptdelegate_to반품,를 사용 become하면 소용이 없습니다(아래 참조).

이 중 어느 것도 도움이 되지 않습니다.

설정 ansible_ssh_executableansible_ssh_args

    ansible_ssh_executable: "/usr/bin/sudo"
    ansible_ssh_args: "-- /usr/bin/ssh -C -o ControlMaster=auto -o ControlPersist=60s"

ansible_ssh_executableAnsible은 값을 확인하는 것으로 보이므로 (예를 들어) 전체 명령줄을 제공하는 것은 불가능합니다.sudo -- ssh

블록으로 포장되어 있습니다..

- name: Install packages
  block:
    - apt:
        pkg:
          - vim-nox
          - lsof
      delegate_to: "baz"
      become: true
  become: true

관련 정보