要使用带密码的'ssh'连接类型,必须安装sshpass程序"

Chr*_*_vr 25 ansible

Recenlty我在现有项目中创建了名为spd的新角色.其他脚本在设置中工作正常.这个新创建的失败.请指出我这里出了什么问题

ansible/roles
      spd
        tasks
        templates
        defaults
Run Code Online (Sandbox Code Playgroud)

部署-spd.yml

 - hosts:
   roles:
     - spd
Run Code Online (Sandbox Code Playgroud)

库存文件

[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
Run Code Online (Sandbox Code Playgroud)

失败

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
Run Code Online (Sandbox Code Playgroud)

更新:

**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'"'"''
Run Code Online (Sandbox Code Playgroud)

Dan*_*Cat 32

它是需要sshpass安装程序的主机.对于像16.04这样的Ubuntu机器,就像它一样简单apt-get install sshpass.再次,此错误消息:

sshpass

适用于HOST(配置程序)而不是GUEST(正在配置的计算机).因此安装sshpass在供应商上.

要在Mac OS上安装sshpass,请参阅此链接

  • 对于CentOS/Red Hat:`sudo yum install -y http:// mirror.centos.org/centos/7/extras/x86_64/Packages/sshpass-1.06-2.el7.x86_64.rpm` (2认同)

Jim*_*Lim 9

只是为了添加上面的各种答案,尽管这回答了标题中所述的主要问题.可以使用paramiko传递参数,这是SSH的另一个python实现.这得到了ansible的支持.这绕过了在host:sshpass上安装的另一个库的需求.

而不是像下面这样使用连接ssh,

$ ansible-playbook -i hosts -v -b -c ssh --ask-pass myplaybook.yml

您可以使用

$ ansible-playbook -i hosts -v -b -c paramiko --ask-pass myplaybook.yml

如果您有兴趣,可以在这里阅读更多内容:http://www.paramiko.org/

  • ...您可以在“inventory”文件中使用“ansible_connection=paramiko”指定,而不是 CLI 参数。 (2认同)

小智 8

对于 macOS

brew install esolitos/ipa/sshpass
Run Code Online (Sandbox Code Playgroud)

为了快速验证,我只需 ping

ansible all -i path/to/host -m ping
Run Code Online (Sandbox Code Playgroud)


小智 7

对于Ubuntu

sudo apt install sshpass

之后运行ansible脚本


Chr*_*_vr 6

这个问题是因为使用属性的ansible_password/defaults/main.yml。我在此文件中维护了许多变量,脚本将与属性ansible_password一起使用。

- include_vars: "{{ role_path}}/defaults/main.yml"
Run Code Online (Sandbox Code Playgroud)

该属性ansible_password保留供Ansible使用。现在,我将变量名更改为,ansible_pass并且工作正常。

  • 重申这一点:定义“ansible_password”将取代您的私钥设置,并导致 ansible 想要使用“sshpass”——通常这是由于 group_vars 以一种意想不到的方式组合。 (2认同)