在ansible playbook中运行 "sudo su"。

问题描述 投票:0回答:1

我试着在远程主机上运行初始游戏本,即设置SSH公钥。问题是,如果没有SSH,我无法连接。我试过这样的东西,但没有用。

- 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只是 我可以以用户身份运行的命令 domscheit. 我没有用户密码 mongod因此,我不能直接使用它进行连接。上面的剧本返回错误,如 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

一旦设置了公共ssh-key,我就可以继续我的实际游戏本,使用 --user mongod.

ansible sudo
1个回答
0
投票

正如 @chelmertz 提到的,你不需要(甚至你不应该)通过 cmd 或其他方式呼应添加 ssh 密钥。有 authorized_key 模块在ansible中正是为了这个。它将负责处理适当的权限和其他事项,因此你的密钥不仅会被添加,而且会按照预期的方式工作。

运行带有为用户添加ssh密钥任务的游戏本 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') }}"
© www.soinside.com 2019 - 2024. All rights reserved.