ansible 能顺利执行的前提是不是免密? /export/yhdfs/daily_check_...

作成日: 2026年1月8日

使用モデル GPT-5.2 by Chat01

質問

ansible 能顺利执行的前提是不是免密?
/export/yhdfs/daily_check_new/bin/venv/lib/python2.7/site-packages/ansible/parsing/vault/init.py:44: CryptographyDeprecationWarning: Python 2 is no longer supported by the Python core team. Support for it is now deprecated in cryptography, and will be removed in the next release.
from cryptography.exceptions import InvalidSignature
10.194.17.10 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
"unreachable": true
}
10.194.17.11 | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
"unreachable": true
}

这种情况 是不是异常的?

回答

简单结论先给你:

是的,在大多数“非交互式”场景下,Ansible 顺利执行的前提基本就是 SSH 免密(或至少是 Ansible 能自动拿到凭据)。
你贴出来的这种情况,对 Ansible 来说是异常的连接失败,不是正常执行状态。

下面分点说明。


1️⃣ Ansible 一定要“免密”吗?

严格说 不一定只能是免密,但必须满足一个条件:

Ansible 在执行时,不能卡在“需要人工输入密码”的地方

常见可行方式只有这几种:

✅ 推荐 & 最常见

  • SSH key 免密登录(公钥认证)
    不需要输入密码 → ✅ Ansible 最稳定

⚠️ 不太推荐

  • 使用 --ask-pass / --ask-become-pass
    bash
    ansible all -m ping --ask-pass
    • 需要人工输入
    • 不适合 crontab / 自动化

⚠️ 有风险

  • 在 inventory 里写明文密码
    ini
    ansible_ssh_pass=xxx
    • 安全性差
    • 容易被禁用

👉 生产环境 / 自动化检查脚本,基本都要求免密 SSH


2️⃣ 你现在这个报错是什么意思?

核心错误是这一句:

text
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)

这表示 Ansible 通过 SSH 连接目标主机时,所有尝试的认证方式都失败了

  • ❌ publickey(没匹配到正确的 SSH key)
  • ❌ gssapi(Kerberos,一般不用)
  • ❌ password(没给密码,或密码不允许)

所以 Ansible 直接判定:

json
"unreachable": true

👉 在 Ansible 语义里,这就是“主机不可达”的异常状态


3️⃣ 这种情况是不是异常?

✔️ 对 Ansible 来说:是异常

只要满足以下任意一条,就说明这是异常情况:

  • 你期望 Ansible 能正常跑
  • 这是 daily_check / 巡检 / 自动化脚本
  • 之前是好的,现在突然不行

❌ 唯一“正常”的情况

只有在这种情况下才算“符合预期”:

这些机器本来就没配置 SSH 免密,你只是临时试跑了一下 Ansible


4️⃣ 另外那个 Python 2 的警告要不要管?

text
CryptographyDeprecationWarning: Python 2 is no longer supported

结论:

  • 不是导致 SSH 失败的原因
  • 只是一个未来风险提示

但要注意:

  • 你现在用的是:
    python2.7 + 老版本 ansible
    
  • 后续:
    • 新系统
    • 新 OpenSSH / cryptography
    • 新 ansible

👉 迟早会彻底跑不起来

建议(中长期):

  • 升级到 Python 3
  • 用较新的 Ansible(2.9+ / ansible-core)

5️⃣ 你现在可以怎么快速定位?

在 Ansible 机器上,手动试一下:

如果这里就要输密码 / 直接被拒

👉 那 100% 是免密没配好

常见原因包括:

  • 公钥没拷过去
  • inventory 里 user 写错
  • ssh 用的是别的用户
  • 目标机禁用了 password 登录

6️⃣ 一句话总结

  • Ansible 顺利执行 ≈ SSH 能无交互登录
  • ❌ 你现在的报错是 典型 SSH 认证失败
  • 📌 在自动化巡检场景下,这一定是异常
  • ⚠️ Python 2 警告不是主因,但技术债明显

如果你愿意,可以把:

  • inventory 里的用户
  • 实际 ssh 登录方式
    发出来,我可以直接帮你判断是 key 问题 / 用户问题 / sshd 配置问题

このQ&Aを共有