web-dev-qa-db-fra.com

pour utiliser le type de connexion 'ssh' avec les mots de passe, vous devez installer le programme sshpass "

Récemment, j’ai créé de nouveaux rôles appelés spd dans mon projet existant.Bien qu’un autre script fonctionne correctement dans la configuration, cela échoue. Veuillez me signaler ce qui ne va pas ici

ansible/roles
      spd
        tasks
        templates
        defaults

deploy-spd.yml

 - hosts:
   roles:
     - spd

fichier d'inventaire

[kube-master]
kubernetes-master-1 ansible_Host=10.20.0.225 ansible_user=centos ansible_become=true
kubernetes-master-2 ansible_Host=10.20.0.226 ansible_user=centos ansible_become=true
kubernetes-master-3 ansible_Host=10.20.0.227 ansible_user=centos ansible_become=true

échec

bash-4.3# ansible-playbook -i inventory/inventory deploy-test-ms.yml --ask-vault-pass
Vault password:

PLAY [kube-master] *************************************************************

TASK [setup] *******************************************************************
Thursday 16 March 2017  13:32:05 +0000 (0:00:00.026)       0:00:00.026 ********
fatal: [kubernetes-master-1]: FAILED! => {"failed": true, "msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}
fatal: [kubernetes-master-2]: FAILED! => {"failed": true, "msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}
fatal: [kubernetes-master-3]: FAILED! => {"failed": true, "msg": "to use the 'ssh' connection type with passwords, you must install the sshpass program"}

PLAY RECAP *********************************************************************
kubernetes-master-1 : ok=0    changed=0    unreachable=0    failed=1
kubernetes-master-2 : ok=0    changed=0    unreachable=0    failed=1
kubernetes-master-3 : ok=0    changed=0    unreachable=0    failed=1

PDATE:

**With failed script**    

        Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/setup.py
<10.20.0.227> ESTABLISH SSH CONNECTION FOR USER: centos
Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/setup.py
Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/setup.py
Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/setup.py
<172.23.169.137> ESTABLISH SSH CONNECTION FOR USER: centos
<10.20.0.225> ESTABLISH SSH CONNECTION FOR USER: centos
<10.20.0.226> ESTABLISH SSH CONNECTION FOR USER: centos

**With successfull script**    

Thursday 16 March 2017  14:03:49 +0000 (0:00:00.066)       0:00:00.066 ********
Using module file /usr/lib/python2.7/site-packages/ansible/modules/core/system/setup.py
<10.20.0.237> ESTABLISH SSH CONNECTION FOR USER: centos
<10.20.0.237> SSH: EXEC ssh -F ./ssh.cfg -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
-o PasswordAuthentication=no -o User=centos -o ConnectTimeout=30 -o 'ControlPath=~/.ssh/ansible-%r@%h:%p' 10.20.0.237 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1489673029.48-15997231643297
4 `" && echo ansible-tmp-1489673029.48-159972316432974="` echo $HOME/.ansible/tmp/ansible-tmp-1489673029.48-159972316432974 `" ) && sleep 0'"'"''
<10.20.0.237> PUT /tmp/tmpnHJPbc TO /home/centos/.ansible/tmp/ansible-tmp-1489673029.48-159972316432974/setup.py
<10.20.0.237> SSH: EXEC scp -F ./ssh.cfg -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
-o PasswordAuthentication=no -o User=centos -o ConnectTimeout=30 -o 'ControlPath=~/.ssh/ansible-%r@%h:%p' /tmp/tmpnHJPbc '[10.20.0.237]:/home/centos/.ansible/tmp/ansible-tmp-1489673029.48-159972316432974/setup.py'
<10.20.0.237> ESTABLISH SSH CONNECTION FOR USER: centos
<10.20.0.237> SSH: EXEC ssh -F ./ssh.cfg -o ControlMaster=auto -o ControlPersist=30m -o StrictHostKeyChecking=no -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey
-o PasswordAuthentication=no -o User=centos -o ConnectTimeout=30 -o 'ControlPath=~/.ssh/ansible-%r@%h:%p' 10.20.0.237 '/bin/sh -c '"'"'chmod u+x /home/centos/.ansible/tmp/ansible-tmp-1489673029.48-159972316432974/ /home/cento
s/.ansible/tmp/ansible-tmp-1489673029.48-159972316432974/setup.py && sleep 0'"'"''
23
Chris_vr

Le problème était dû à l'utilisation de l'attribut ansible_password dans /defaults/main.yml. J'ai conservé beaucoup de variables dans ce fichier pour être utilisées par le script avec l'attribut ansible_password.

- include_vars: "{{ role_path}}/defaults/main.yml"

L'attribut ansible_password est réservé à Ansible. Maintenant, j'ai changé le nom de la variable en ansible_pass et ça fonctionne bien.

6
Chris_vr

C'est la machine hôte qui a besoin du programme sshpass. Pour une machine Ubuntu telle que 16.04, c’est aussi simple que apt-get install sshpass. Encore une fois, ce message d'erreur de:

ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program

S'applique à l'hôte (fournisseur), pas à l'invité (machine (s) en cours d'approvisionnement). Installez donc sshpass sur le provisioner.

Pour installer sshpass sur Mac OS, reportez-vous à ce lien

29
DanCat

Il suffit d’ajouter aux diverses réponses ci-dessus, bien que cela réponde à la question principale énoncée dans le titre. Il est possible de transmettre le paramètre à l'aide de paramiko, qui est une autre implémentation de SSH python). Cette option est prise en charge par ansible. Cela évite de recourir à une autre bibliothèque installée sur l'hôte: sshpass.

au lieu d'utiliser la connexion ssh comme ci-dessous,

$ ansible-playbook -i hôtes -v -b -c ssh --ask-pass myplaybook.yml

vous pouvez utiliser

$ ansible-playbook -i hôtes -v -b -c paramiko --ask-pass myplaybook.yml

si vous êtes intéressé, vous pouvez en lire plus ici: http://www.paramiko.org/

7
Jimmy M.G. Lim