Ansible 使用密码而不是密钥进行 SSH 失败

Ansible 使用密码而不是密钥进行 SSH 失败

我正在使用 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/2018/fixing-unreachable-ssh-error-when-running-ansible-playbooks-against-ubuntu-1804-or-1604

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:

相关内容