2017-02-07 4 views
1

Я использую User в ~/.ssh/config файл, чтобы указать имя пользователя анзибль использует для доступа к удаленному серверу, например:Найти анзибль SSH пользователя

Host 123.234.098.076 
    User my_local_user_name 

Есть ли способ, чтобы найти это имя пользователя в анзибле ? В следующем PlayBook ansible_user определяется:

--- 
- hosts: "all" 
    tasks: 
    - name: "perform whoami" 
     shell: whoami 
     register: whoami 
    - set_fact: 
     ansible_user: "{{ whoami.stdout }}" 
    - debug: 
     msg: "I am user: {{ ansible_user }}" # will display: "I am user: my_local_user_name" 

Однако я не уверен ни в непредусмотренных последствиях установки ansible_user непосредственно в отличии от использования установки remote_user в сборнике пьес, в инвентаре или в анзибле конфигурации такой как:

--- 
- hosts: "all" 
    remote_user: my_local_user_name 
    tasks: 
    #- name: "perform whoami" 
    # shell: whoami 
    # register: whoami 
    #- set_fact: 
    # ansible_user: "{{ whoami.stdout }}" 
    - debug: 
     msg: "I am user: {{ ansible_user }}" # will display: "I am user: my_local_user_name" 

ответ

2

Если вам необходимо получить SSH пользователя после того, как соединение было сделано и факты о целевом компьютере доступны, вы можете использовать ansible_user_id факт.

Если вы хотите знать пользователю SSH, прежде чем соединение было сделано, вот трюк:

--- 
- hosts: all 
    gather_facts: no 
    tasks: 
    - name: Save our destination host 
     set_fact: dest_host="{{ ansible_host }}" 

    - name: Get user from local ssh config 
     local_action: shell ssh -G {{ dest_host }} | awk '/^user /{ print $2 }' 
     changed_when: false 
     register: ssh_user 

    - name: Print forced ansible_user if defined or username from ssh config otherwize 
     debug: msg="Ansible will connect with {{ ansible_user | default(ssh_user.stdout) }}" 

- hosts: all 
    gather_facts: yes 
    tasks: 
    - name: Print our remote name 
     debug: msg="Ansible connected with {{ ansible_user_id }}" 

Не уверен, что если ssh -G доступен на каждой системе.

Если вы не укажете remote_user в анзибль пьес или инвентаризации, он полагается на SSH, чтобы сделать соединение, так что единственный способ узнать имя пользователя, чтобы разобрать SSH конфигурационные файлы, где -G опция пригодится.

Смежные вопросы