1 votes

Impossible d'exécuter un playbook Ansible contre un hôte EC2

J'essaie d'exécuter un simple playbook Ansible sur un hôte EC2 déjà provisionné. Lorsque j'exécute ansible-playbook, j'obtiens l'erreur suivante :

SSH Error: data could not be sent to the remote host. Make sure this host can be reached over ssh

À l'aide du fichier .pem fourni par Amazon, je peux me connecter manuellement à la boîte en effectuant les opérations suivantes

ssh ubuntu@my_instance_ip

.

Voici la commande complète que j'exécute :

ansible-playbook --inventory-file=inventory/production --extra-vars=ansible_ssh_user=ubuntu my-playbook.yml -vvvv

Voici mon fichier d'inventaire (IP/DNS masqué) :

[test]
ec2-1-1-1-1.us-west-1.compute.amazonaws.com   ansible_ssh_private_key_file=~/path_to_pem_file.pem

Ce qui est intéressant, c'est que si j'exécute la commande ssh, le livre de jeu ansible s'affiche de manière verbeuse :

ssh -C -vvv -o ControlMaster=auto -o ControlPersist=60m -o ControlPath="/Users/me/.ansible/cp/ansible-ssh-%h-%p-%r" -o IdentityFile="/path_to_my_pem_file.pem" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=ubuntu -o ConnectTimeout=10 ec2-1-1-1-1.us-west-1.compute.amazonaws.com

J'obtiens ce qui suit :

debug3: muxserver_listen: temporary control path /Users/me/.ansible/cp/ansible-ssh-ec2-1-1-1-1.us-west-1.compute.amazonaws.com-22-ubuntu.8MjEBnDdRIAO8zAT
unix_listener: "/Users/me/.ansible/cp/ansible-ssh-ec2-1-1-1-1.us-west-1.compute.amazonaws.com-22-ubuntu.8MjEBnDdRIAO8zAT" too long for Unix domain socket

Cette erreur est-elle valable ? Si oui, existe-t-il un moyen de raccourcir la commande ? Merci !

1 votes

Il peut s'agir d'un doublon de stackoverflow.com/questions/35970686/

0 votes

Oui, c'était ça ! Je ne sais pas trop comment j'ai pu rater ça. J'ai mis un chemin plus court dans la configuration control_path et cela a fonctionné.

0 votes

Comme l'a souligné Knowhy, le problème et la réponse se trouvent ici : stackoverflow.com/questions/35970686/

4voto

Henrik Pingel Points 8426

Comme cela a déjà été souligné dans les commentaires et dans la question liée à SO le message d'erreur pertinent est ici : too long for Unix domain socket . Cette erreur peut être résolue en modifiant les paramètres de l'interface utilisateur. control_path dans ansible.cfg

Le chemin à utiliser pour les sockets ControlPath. Par défaut, il s'agit de "%(répertoire)s/ansible-ssh-%%h-%%p-%%r", cependant sur certains systèmes avec des des noms d'hôtes très longs ou des noms de chemins très longs (causés par de longs noms d'utilisateurs ou des noms d'utilisateurs profondément imbriqués). ou des répertoires personnels profondément imbriqués), cela peut dépasser la limite de caractères sur les noms de socket de fichier (108 caractères pour la plupart des plateformes). Dans ce cas, vous pouvez raccourcir la chaîne ci-dessous.

Exemple : control_path = %(directory)s/%%h-%%r

1voto

Sammitch Points 2072

J'ai deux fois le même problème, car les machines sont jointes à un domaine et l'adresse de l'ordinateur est la même. $HOME Le chemin est très long, tout comme mon nom d'utilisateur, par exemple : /home/local.companyname.com/Smitty.Werbenjagermanjensen donc pratiquement n'importe quel chemin de prise de contrôle va être trop long.

Il existe deux autres façons d'aborder ce problème :

  1. Pour les noms d'hôtes longs :
    • Au lieu d'utiliser les drapeaux habituels %r , %h y %p vous pouvez utiliser %C qui est un hachage des trois.
    • eg : dfd609b4ea05eab3927aa71b91115b29317d017d
    • Note : Cette option est apparemment un ajout récent à ssh, donc si elle ne fonctionne pas, vous devriez vraiment envisager de mettre à jour ssh et/ou votre système d'exploitation.
  2. Pour les longs chemins précédents :

    • Je préfère de loin que mes prises vivent dans ~/.ssh/sockets pour que personne d'autre ne puisse les toucher.

      mkdir -p ~/.ssh/sockets && \
      chmod 0700 ~/.ssh/sockets && \
      sudo ln -s ~/.ssh/sockets /var/local/sw-ssh && \
      sudo chown -h $myuser:$mydomain /var/local/sw-ssh
    • Configurez votre Ansible control_path a /var/local/sw-ssh/%%C

Avec les deux, mes chemins de prise vont de : /home/local.companyname.com/Smitty.Werbenjagermanjensen/.ssh/sockets/Smitty.Werbenjagermanjensen@foobar.dev.application.companyname.com-22

A : /var/local/sw-ssh/dfd609b4ea05eab3927aa71b91115b29317d017d

Note : Il s'agit d'une configuration de client ssh parfaitement valide et qui peut être ajoutée à votre fichier ~/.ssh/config afin que vous puissiez bénéficier des avantages de ssh sockety 24 heures sur 24 et 7 jours sur 7, et pas seulement lorsque vous exécutez des jeux Ansible.

Host *
    ControlMaster auto
    ControlPath /var/local/sw-ssh/%C
    ControlPersist 600

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X