【问题标题】:how ansible connects to remote devicesansible 如何连接到远程设备
【发布时间】:2022-01-10 15:03:44
【问题描述】:

我正在学习如何在 python 中创建 ansible 模块,我想连接到远程设备,我正在查看 ansible 源代码以了解它们是如何连接的,但我仍然无法理解如何连接???

我从 ansible 获取了这个简单的模块文件来检查它们如何连接到远程设备并执行模块所做的所有事情 https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/ping.py

我在这个文件中没有看到任何用于 ssh 的套接字或库,那么它是怎么回事?

ansible 是先连接远程主机,然后再激活远程主机上的模块吗?

这就是它在远程设备上需要 python 的原因吗?

看不懂

【问题讨论】:

  • 我们使用 ansible cli 工具来运行 adhoc 命令和 ansible-playbook 来根据 playbook 任务复制和执行所需的模块。它基本上是这些 cli 工具,它们根据清单连接到远程主机,并根据我的理解复制所需的模块并在远程主机上执行它们。正如 ansible 文档中提到的,我们需要确保我们可以 ssh 到远程主机,然后才能管理远程主机。
  • 过于简化的视图:模块被归档到控制器上的 tarball 文件中。该文件使用为主机配置的whatever connection plugin 推送到远程主机(ssh、本地、docker ...)。 tarball 被提取到目标上的临时目录并使用 python 执行。结果返回给控制器。临时内容被清理。 -- 你可能会更好地理解使用-vvv运行ansible(-playbook)

标签: python networking ssh automation ansible


【解决方案1】:

据我所知,Ansible 使用 ssh 连接。

您可以在 'repo:ansible/ansible filename:ssh' 中进行研究 github研究here

您可以检查此code。 Ansible 还使用 lib paramiko 与 ssh 连接。 如我们所见here

【讨论】:

  • Ansible 使用connection plugin 到达目标主机。 ssh 确实是最常见的,但还有其他的:本地、docker、winrm……你甚至可以自己编写。
  • 是的,它使用 2 种方法: - ansible-builtin-ssh-connect-via-ssh-client-binary - paramiko_ssh Ansible 不需要代理,而是 ssh 服务器。所以我的理解是你可以在同一台机器上使用两者(客户端和服务器)
  • localdockerwinrm 根本不使用 ssh。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-21
  • 2017-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 2013-02-18
相关资源
最近更新 更多