Não é possível executar o playbook Ansible contra o host EC2

1

Estou tentando executar um playbook Ansible simples em um host EC2 já provisionado. Quando executo o ansible-playbook, recebo o seguinte erro:

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

Usando o arquivo .pem fornecido pela Amazon, posso fazer ssh manualmente na caixa apenas fazendo

ssh ubuntu@my_instance_ip

.

Este é o comando completo que estou executando:

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

Este é o meu arquivo de inventário (IP / DNS mascarado):

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

O interessante é se eu executar o comando ssh que o ansible-playbook solta com clareza:

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

Eu recebo o seguinte:

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

Esse erro é válido? Em caso afirmativo, existe alguma maneira de tornar o comando mais curto? Obrigado!

    
por fender4645 19.08.2016 / 20:38

2 respostas

4

Como já foi mencionado nos comentários e no linked SO question a mensagem de erro relevante é: too long for Unix domain socket . Este erro pode ser resolvido ajustando o parâmetro control_path em ansible.cfg

The path to use for the ControlPath sockets. This defaults to "%(directory)s/ansible-ssh-%%h-%%p-%%r", however on some systems with very long hostnames or very long path names (caused by long user names or deeply nested home directories) this can exceed the character limit on file socket names (108 characters for most platforms). In that case, you may wish to shorten the string below.

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

    
por 20.08.2016 / 11:46
1

Eu tenho o dobro do problema, pois as máquinas são associadas ao domínio e o caminho $HOME é muito longo e meu nome de usuário, por exemplo: /home/local.companyname.com/Smitty.Werbenjagermanjensen , então praticamente qualquer caminho de soquete de controle será muito longo.

Existem duas outras maneiras de resolver esse problema:

  1. Para nomes de host longos:
    • Em vez de usar as bandeiras usuais %r , %h e %p , você pode usar %C , que é um hash das três.
    • por exemplo: dfd609b4ea05eab3927aa71b91115b29317d017d
    • Nota: Esta opção é aparentemente uma adição recente ao ssh, por isso, se não estiver funcionando, você deve verificar a atualização do ssh e / ou do sistema operacional.
  2. Por longos caminhos anteriores:

    • Eu prefiro muito mais que meus sockets morem em ~/.ssh/sockets para que ninguém mais possa tocá-los.

      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
      
    • Defina seu Ansible control_path como /var/local/sw-ssh/%%C

Com esses dois caminhos do meu soquete vão de: /home/local.companyname.com/Smitty.Werbenjagermanjensen/.ssh/sockets/Smitty.Werbenjagermanjensen@foobar.dev.application.companyname.com-22

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

Nota: Esta é toda a configuração do cliente ssh perfeitamente válida e pode ser adicionada ao seu ~/.ssh/config para que você possa se beneficiar da bondade do ssh 24/7 e não apenas enquanto estiver executando o Ansible joga.

Host *
    ControlMaster auto
    ControlPath /var/local/sw-ssh/%C
    ControlPersist 600
    
por 27.10.2018 / 01:51