Ricerca nel sito web

Come risolvere l'errore Ansible "Connessione condivisa a x.x.xx chiusa".


In questo breve articolo spiegheremo come risolvere il: “module_stderr“: “Connessione condivisa a x.x.x.x chiusa.\r\n”, “module_stdout”: “/bin/sh: /usr/ bin/python: nessun file o directory\r\n”, durante l'esecuzione dei comandi Ansible.

La schermata seguente mostra l'errore del modulo Ansible. Abbiamo riscontrato questo errore durante l'esecuzione di un comando Ansible per eseguire comandi su due server CentOS 8 appena distribuiti.

Dai dettagli dell'errore, la connessione non è riuscita perché le shell nel sistema remoto non sono riuscite a trovare l'interprete Python (/usr/bin/python) come indicato da la riga: “module_stdout”: “/bin/sh: /usr/bin/python: No such file or directory\r\n”.

Dopo aver controllato gli host remoti, abbiamo scoperto che sui sistemi non è installato Python 2.

Hanno Python 3 installato per impostazione predefinita e il suo binario è /usr/bin/python3.

Secondo la documentazione di Ansible, Ansible (2.5 e successive) funziona solo con Python versione 3 e successive. Inoltre, Ansible dovrebbe rilevare e utilizzare automaticamente Python 3 su molte piattaforme fornite con esso.

Tuttavia, se fallisce, puoi configurare esplicitamente un interprete Python 3 impostando la variabile di inventario ansible_python_interpreter a livello di gruppo o host sulla posizione di un interprete Python 3 come descritto di seguito.

Passaggio dell'interprete Python ad Ansible dalla riga di comando

Per correggere temporaneamente l'errore precedente, puoi utilizzare il flag -e per passare l'interprete Python 3 ad Ansible come mostrato.

ansible prod_servers  -e 'ansible_python_interpreter=/usr/bin/python3' -a "systemctl status firewalld" -u root

Impostazione dell'interprete Python per Ansible nell'inventario

Per correggere l'errore in modo permanente, imposta la variabile di inventario ansible_python_interpreter nel tuo inventario /etc/ansible/hosts. Puoi aprirlo per la modifica utilizzando l'editor di testo v/im o nano come mostrato.

sudo vim /etc/ansible/hosts
OR
vim /etc/ansible/hosts

Aggiungi la seguente riga a ciascuno host o host in un gruppo:

ansible_python_interpreter=/usr/bin/python3

Quindi, le definizioni dei tuoi host possono assomigliare a queste:

[prod_servers]
192.168.10.1			ansible_python_interpreter=/usr/bin/python3
192.168.10.20			ansible_python_interpreter=/usr/bin/python3.6

In alternativa, imposta lo stesso interprete Python per un gruppo di host come mostrato.

[prod_servers]
192.168.10.1		
192.168.10.20		

[prod_servers:vars]
ansible_python_interpreter=/usr/bin/python3

Impostazione dell'interprete Python predefinito nella configurazione Ansible

Per impostare l'interprete Python predefinito, puoi impostare la variabile di inventario ansible_python_interpreter nel file di configurazione principale di Ansible /etc/ansible/ansible.cfg.

sudo vim /etc/ansible/ansible.cfg

Aggiungi la seguente riga nella sezione [defaults].

ansible_python_interpreter=/usr/bin/python3

Salva il file e chiudilo.

Ora prova a eseguire ancora una volta il comando Ansible:

ansible prod_servers -a "systemctl status firewalld" -u root

Per ulteriori informazioni su questo argomento, vedere il supporto di Python 3 nella documentazione ufficiale di Ansible.