我想从另一台主机上的ansible角色执行任务。我可以使用delegate_to或者我应该使用其他方式吗?
Class Monoid (A:Type) (dot : monoid_binop A) (one : A) : Type := {
dot_assoc : forall x y z:A, x*(y*z) = x*y*z;
one_left : forall x, one * x = x;
one_right : forall x, x * one = x
}.
目标:我想在远程主机上创建用户使用login:password和ssh argument ='-o StrictHostKeyChecking = no'
对于我的库存文件,我使用下一个vars:
- name: Create user on remote host
user:
name: "{{ item.1 }}"
state: present
delegate_to: "user@{{ item.0.host }}"
run_once: true
become: True
with_subelements:
- "{{ user_ssh_keys_slave_hosts }}"
- users
when: item.1 is defined
答案 0 :(得分:0)
SSH由~/.ssh/config
配置。在那里你可以说哪个认证类型应该是用户。你应该把你的SSH选项放在那里。这定义了与主机的连接应使用不同的用户名:
Host item-0-host
User user
StrictHostKeyCecking no
RSAAuthentication no
HostName name-of-the-item-0-host
通过这个你有两个主机名。原始主机名,可用于管理主机本身。还有一个新的主机名,可以用来进行用户管理。
我不确定,但我认为,您无法在delegate_to
选项的值中指定用户名。
顺便说一下:你知道Ansible的user模块吗?
答案 1 :(得分:0)
Tnx的答案。我解决了我的问题。
ansible_ssh_common_args =' -o StrictHostKeyChecking = no'在库存文件中。
并且
- name: Set authorized key on remote host
authorized_key:
user: "{{ item.1 }}"
state: present
key: "{{ user_ssh_public_key_fingerprint.stdout }}"
delegate_to: "{{ item.0.host }}"
run_once: true
become: True
with_subelements:
- "{{ user_ssh_keys_slave_hosts }}"
- users
when: item.1 is defined
user_ssh_keys_slave_group: "{{ groups['slave_hosts']|default([''])}}"
user_ssh_keys_slave_hosts: "{%- set ssh_user = [] %}{%- for host in user_ssh_keys_slave_group %}
{{- ssh_user.append(dict(host=host, ssh_user=hostvars[host]['slave_hosts']|default([]))) }}
{%- endfor %}
{{- ssh_user -}}"