排除 ansible SSH 无法找到根本原因

troubleshooting ansible SSH can't reach a root cause

我遇到问题 运行 一些我在命令行中定义 ansible_user_ssh=root 的剧本 和 ssh 命令通过 ansible,returns 权限被拒绝。

HOST | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).\r\n",
    "unreachable": true
}

我正在尝试排除故障,但没有找到根本原因。

来自 root 甚至清单(功能用户)文件中定义的用户的密钥已正确传播。 如果我从 root 用户或功能用户执行 ssh,它在那里没有问题。

如果我执行:

ansible -i /app/user/applications/inventory/commercialaseenv300-hosts -m ping -u root HOST

有效

如果我执行:

ansible -i /app/user/applications/inventory/commercialaseenv300-hosts -m ping -e ansible_ssh_user=root HOST

没用。 Returns 权限被拒绝

如果我执行:

sudo ansible -i /app/user/applications/inventory/commercialaseenv300-hosts -m ping -e ansible_ssh_user=root HOST

有效

如果我换成root用户执行:

ansible -i /app/user/applications/inventory/commercialaseenv300-hosts -m ping -e ansible_ssh_user=root HOST

有效

但我需要一个不起作用的脚本,因为它是大型脚本的一部分。 据我所知,这之前工作正常,没有系统更改。

一些开箱即用的眼睛可以给一两个提示吗? 提前谢谢你

使用 become 可能会有帮助,

$ ansible all -m ping --become-user=root
192.168.1.5 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

如果您 运行 command/playbook 来自不同的用户,则需要提供 ssh 密码。

$ ansible all -m ping -e ansible_ssh_user=root -k
SSH password: 
192.168.1.5 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

问题仍然与密钥共享有关。发现一个key变了(有人运行 keygen误操作) ansible 用户和 root 用户之间的密钥不正确。