有谁知道为什么这不起作用吗?
我在 Cygwin 上使用 Ansible,使用的是编译版的 sshpass。我按照以下说明操作:http://www.jeffgeerling.com/blog/running-ansible-within-windows进行设置。这是我的 /etc/ansible/hosts 文件:
10.240.227.56 ansible_ssh_pass='password' ansible_user='domain\userid'
10.240.227.59 ansible_ssh_pass='password' ansible_user='domain\userid' ansible_become=true ansible_become_method=sudo ansible_become_user=privilegeduser
我尝试使用两个不同的主机和两种不同的配置来查看是否可以缩小问题范围,但它们的行为完全相同。这是我尝试 ping 主机时得到的结果:
$ ansible all -vvv -m ping
No config file found; using defaults
<10.240.227.56> ESTABLISH SSH CONNECTION FOR USER: domain\userid
<10.240.227.59> ESTABLISH SSH CONNECTION FOR USER: domain\userid
<10.240.227.56> SSH: EXEC sshpass -d48 ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o 'User=domain\userid' -o ConnectTimeout=10 -o ControlPath=/home/userid/.ansible/cp/ansible-ssh-%h-%p-%r 10.240.227.56 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1462472936.54-168377440229444 `" && echo "` echo $HOME/.ansible/tmp/ansible-tmp-1462472936.54-168377440229444 `" )'"'"''
<10.240.227.59> SSH: EXEC sshpass -d49 ssh -C -q -o ControlMaster=auto -o ControlPersist=60s -o 'User=domain\userid' -o ConnectTimeout=10 -o ControlPath=/home/userid/.ansible/cp/ansible-ssh-%h-%p-%r 10.240.227.59 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo /tmp/ansible-tmp-1462472936.54-274121315105946 `" && echo "` echo /tmp/ansible-tmp-1462472936.54-274121315105946 `" )'"'"''
10.240.227.59 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
10.240.227.56 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh.",
"unreachable": true
}
远程端是使用 Windows 身份验证的 RHEL 7 VM,因此用户名为“domain\userid”。
我可以使用普通的 命令行上的相同凭据正常连接ssh
。我也可以使用 正常连接sshpass
。当我尝试使用 ping 主机时ansible
,远程端/var/log/secure
显示密码验证成功。
我已确认托管主机上有 Python 2.7x。
我尝试以 身份登录的用户domain\userid
没有特权。当我手动登录该框时,我sudo su - privilegeduser
输入domain\userid
密码,然后可以以 root 或任何其他用户身份使用 sudo 完成其余操作。
答案1
使用 -vvvvv(5 个“v”)进行完整的 SSH 调试。
答案2
对于那些因为一条线路而抓狂不已的人来说,EXEC
当你直接使用它时运行良好,但当 Ansible 使用它时会超时,如果你安装了 Firejail,请检查是否which ssh
出现了一个/usr/local/bin/ssh
指向 的符号链接firejail
。
SSH 是默认会为其编写包装器的事物列表之一firecfg
,而 Firejail 可以轻松破坏这一点……例如,通过制作ssh
和ansible
/ansible-playbook
或不在 Ansible 指定为其的任何路径上看到相同的东西ControlPath
。