Почему Ansible все еще может подключать узел без ssh

#ssh #ansible

#ssh #ansible

Вопрос:

Я создал два контейнера Ubuntu docker, один с управляющим узлом, а другой с подчиненным. Я запустил

 ansible all -m service -a "name=ssh state=stopped"
  

и это показывает

 172.18.0.3 | CHANGED => {
    "changed": true, 
    "name": "ssh", 
    "status": {
        "enabled": {
            "changed": false, 
            "rc": null, 
            "stderr": null, 
            "stdout": null
        }, 
        "stopped": {
            "changed": true, 
            "rc": 0, 
            "stderr": "", 
            "stdout": " * Stopping OpenBSD Secure Shell server sshdn   ...done.n"
        }
    }
}
  

Затем я попытался подключиться к ssh вручную, это не удалось, потому что сервер openssh остановился, и это нормально. Затем я запустил другую команду ansible для его запуска.

 # ansible all -m service -a "name=ssh state=started"
172.18.0.3 | CHANGED => {
    "changed": true, 
    "name": "ssh", 
    "status": {
        "enabled": {
            "changed": false, 
            "rc": null, 
            "stderr": null, 
            "stdout": null
        }, 
        "started": {
            "changed": true, 
            "rc": 0, 
            "stderr": "", 
            "stdout": " * Starting OpenBSD Secure Shell server sshdn   ...done.n"
        }
    }
}
  

Я тихо поражен, как ansible смог подключиться к узлу, когда я уже остановил службу ssh узла? Существует ли какой-либо альтернативный метод, которым ansible подключается к узлу, отличному от ssh?

Комментарии:

1. Вероятно, для этого используется Docker Python SDK, который, в свою очередь, использует REST API сервера Docker. SSH здесь не задействован, поскольку ни к одному внешнему серверу не осуществляется доступ в соответствии с предоставленной информацией.

2. Когда оба являются просто контейнером docker, могут ли они использовать docker api внутри контейнера?

3. вы можете запустить свою команду, добавив ‘-vvvvvv’, и, надеюсь, увидите больше информации о том, как она подключается к узлам.

Ответ №1:

Ansible может подключаться к целевым объектам через множество протоколов.

Взгляните на список подключаемых модулей

В вашем случае для контейнеров Docker он использует Docker API.