Запуск "sudo su" в ansible playbook - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь запустить исходную книгу воспроизведения на удаленном хосте, т.е. установить ключ S SH publi c. Проблема в том, что без S SH я не могу подключиться. Я пробовал подобные вещи, но это не работает.

- hosts: remote_host
  become: yes
  become_user: mongod
  become_method: sudo
  become_exe: "sudo su - "

  tasks:

  - name: Add public ssh keys
    lineinfile:
      path: /home/mongod/.ssh/authorized_keys
      owner: mongod
      group: mongod
      mode: '0600' 
      state: present 
      line: "{{ item }}"
    loop:
      - "ssh-rsa AAAAB3NzaC1yc2E...= domscheit@ansible_host"

Обратите внимание, sudo su - mongod - это команда only , которую я могу запустить как пользователь domscheit. У меня нет пароля для пользователя mongod, поэтому я не могу использовать его напрямую для подключения. Выше playbook возвращает ошибку вроде FAILED! => {"msg": "Missing sudo password"}

На самом деле я нашел решение:

- hosts: remote_host
  tasks:

  - name: Add public ssh-key to authorized_keys
    shell: |
      sudo su - mongod <<< "mkdir --mode=700 /home/mongod/.ssh"
      sudo su - mongod <<< "echo ssh-rsa AAAAB3Nza...= domscheit@ansible_host >> /home/mongod/.ssh/authorized_keys"
      sudo su - mongod <<< "chmod 600 /home/mongod/.ssh/authorized_keys"
    args:
      executable: /bin/bash

Оно работает, но должно быть лучшее решение. Он создает [WARNING]: Consider using 'become', 'become_method', and 'become_user' rather than running sudo

После того, как установлен ключ publi c s sh, я могу продолжить работу с моими реальными книгами воспроизведения, используя --user mongod.

1 Ответ

0 голосов
/ 05 мая 2020

Как заметил @chelmertz, вам не нужно (или даже не нужно) добавлять ключ sh, повторяя его с помощью cmd или чего-то еще. Для этого есть authorized_key модуль в ansible. Он позаботится о правильных привилегиях и о том, что не так, ваш ключ не только будет добавлен, но и будет работать как положено.

Запустите playbook с задачей, добавив ключ s sh для пользователя mongod, используя become: yes :

- hosts: remote_host
  become: yes
  tasks:

    - name: Set authorized key taken from file
      authorized_key:
      user: mongod
      state: present
      key: "{{ lookup('file', '/path/to/your/pub/key/id_rsa.pub') }}"
...