2016-03-13 15 views
11

Questo è un problema noto e ho trovato una soluzione, ma non funziona per me.Ansible: SSH Errore: unix_listener: troppo lungo per socket di dominio Unix

Prima ho avuto:

fatal: [openshift-node-compute-e50xx] => SSH Error: ControlPath too long 
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue. 

Così ho creato un ~/.ansible.cfg. Il suo contenuto:

[ssh_connection]  
control_path=%(directory)s/%%h‐%%r 

Ma dopo aver ripetuto il mio ansible ho un errore su "troppo lungo".

fatal: [openshift-master-32axx] => SSH Error: unix_listener: "/Users/myuser/.ansible/cp/ec2-xx-xx-xx-xx.eu-central-1.compute.amazonaws.com-centos.AAZFTHkT5xXXXXXX" too long for Unix domain socket 
    while connecting to 52.xx.xx.xx:22 
It is sometimes useful to re-run the command using -vvvv, which prints SSH debug output to help diagnose the issue. 

Perché è ancora troppo lungo?

+0

Possibile duplicato di [Ansible: SSH Errore: ControlPath troppo lungo] (http://stackoverflow.com/questions/33516218/ansible -ssh-error-controlpath-too long) – Jakuje

+0

Correlato, ma non un duplicato. Si tratta di risolverlo nella configurazione di Ansible mentre il possibile duplicato riguarda ssh config stesso. – udondan

risposta

17

Il limite è di 104 o 108 caratteri. (Ho trovato diverse affermazioni sul web)

È XXXed alcune informazioni sensibili nel messaggio di errore quindi non è chiaro per quanto tempo il vostro percorso è in realtà.

Immagino che %(directory)s sia sostituito dalla directory .ansible nella cartella degli utenti. Rimozione che e utilizzare direttamente la cartella utente ti farebbe risparmiare 12 caratteri:

control_path=~/%%h‐%%r 

Certo, questo sarà lo spam vostra home directory con prese di controllo.

A seconda della lunghezza effettiva del proprio nome utente, è possibile vedere se è possibile semplicemente creare un'altra directory o trovare un percorso più breve ovunque. Ad esempio, io uso ~/.ssh/tmp/%%h_%%r

Solo 3 caratteri meno ma è abbastanza.

Infine, se niente di tutto questo aiuta, è ancora potrebbe ripiegare usando /tmp per memorizzare le prese. Ma sappi che chiunque abbia accesso a /tmp su quella macchina potrebbe essere in grado di utilizzare i tuoi socket allora.

+1

Anche se il tuo nome host è lungo puoi usare un hash con 'control_path =% (directory) s/%% C' come [suggerito qui] (https://github.com/ansible/ansible/issues/11536#issuecomment -153.030.743). – amoebe

1

Per me, file di configurazione Ansible mancava. Dopo ciò ha funzionato per me.

1

Personalizzazione del control_path risolve il problema per me. Ecco come farlo senza inviare spam alla home directory.

I control_path default (documentation):

control_path=%(directory)s/ansible-ssh-%%h-%%p-%%r 

Modifica config ansible.

vim ~/.ansible.cfg 

Ecco il contenuto dei file di esempio con il nuovo control_path valore:

[defaults] 
inventory=/etc/ansible/hosts 

[ssh_connection] 
control_path=%(directory)s/%%h-%%r 
control_path_dir=~/.ansible/cp 
+0

+1 per essere l'unica risposta che non presuppone che io sia un esperto ansible (aspetta ... dove imposto control_path? Oh, * THERE! *) –