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_executableansible_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

ベストアンサー1

おすすめ記事