我正在使用 ansible 尝试设置服务器。目前,服务器有一个使用密码进行身份验证的 root 用户(不需要 ssh 密钥)。如果我从命令行手动 ssh,系统会提示我输入密码,并且登录没有问题。
这是我尝试使用 ansible 时看到的内容:
python3 $(which ansible) our.server.net -m ping -c ssh --ask-pass -u root
SSH password:
our.server.net | UNREACHABLE! => {
"changed": false,
"msg": "SSH Error: data could not be sent to remote host \"10.123.80.75\". Make sure this host can be reached over ssh",
"unreachable": true
}
如果我添加 -vvvv 我会得到更多信息(仅包括这里的重要部分)
Loading callback plugin minimal of type stdout, v2.0 from /usr/local/lib/python3.6/site-packages/ansible/plugins/callback/minimal.py
META: ran handlers
Using module file /usr/local/lib/python3.6/site-packages/ansible/modules/system/ping.py
<10.123.80.75> ESTABLISH SSH CONNECTION FOR USER: root
<10.123.80.75> SSH: EXEC sshpass -d9 ssh -vvv -o ControlMaster=auto -o ControlPersist=60s -o PreferredAuthentications=publickey -o ForwardAgent=yes -o StrictHostKeyChecking=no -o User=root -o ConnectTimeout=10 -o ControlPath=/home/martinw/.ansible/cp/eeb0630cdf 10.123.80.75 '/bin/sh -c '"'"'/usr/bin/python && sleep 0'"'"''our.server.net | UNREACHABLE! => {
"changed": false,
"msg": "SSH Error: data could not be sent to remote host \"10.123.80.75\". Make sure this host can be reached over ssh",
"unreachable": true
}
我的环境/ ansible 设置中是否缺少了某些东西?
答案1
我相信杰夫·格林,回答了这个问题。
https://www.jeffgeerling.com/blog/2017/how-fix-ssh-errors-when-using-ansible-newer-oses-ubuntu-1604
不过,解决这个问题很容易!如果您有能力构建自己的基础映像(例如 AWS 上的 AMI),您只需确保 /usr/bin/python 已安装在映像上即可。如果只有 python3,您可以在受
ansible_python_interpreter=/usr/bin/python3
影响的主机的清单中设置。如果您无法做到这两点,最好的
或者安装可用的 Python 版本。
---
- hosts: all
gather_facts: no
pre_tasks:
- name: Install Python if not already present.
raw: test -e /usr/bin/python || (apt -y update && apt install -y python-minimal)
changed_when: False
- name: Gather facts after Python is definitely present.
setup: