我试着在远程主机上运行初始游戏本,即设置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
.
正如 @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') }}"