ansible - 在 ansible playbook 中运行“sudo su”
问题描述
我尝试在远程主机上运行初始剧本,即设置 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 密钥后,我可以继续使用--user mongod
.
解决方案
正如@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') }}"
推荐阅读
- .net-5 - 如何从 Microsoft.Graph.Auth 替换 InteractiveAuthenticationProvider
- node.js - 如何使用 Nodejs 和 MongoDB 进行登录?
- linux - 如何摆脱充气/放气错误?
- python - 多线程硒python
- python - Client.send_message 不再工作了,还有其他方法吗?
- c# - 使用 OR 谓词创建动态 linq to EF 查询
- reactjs - React 看不到图片路径
- arrays - 不了解指向数组的自定义 C 数据类型指针的引用和取消引用
- android - 如何仅在文件管理器中单击文件时打开我的应用程序?
- css - 如何在管理中使用店面 SCSS 变量?