Spec-Zone.ru › Ansible

Как подключаться к устройствам RouterOS по SSH

Коллекция предоставляет два модуля для подключения к устройствам RouterOS по SSH:

  • Модуль community.routeros.facts собирает сведения об устройстве RouterOS;
  • Модуль community.routeros.command выполняет команды на устройстве RouterOS.

Для этого модулям необходим плагин подключения ansible.netcommon.network_cli.

Важные замечания

  1. Модули, использующие SSH, не поддерживают произвольные символы в имени устройства. Если у вас возникли проблемы с подключением к устройству, убедитесь, что имя вашего MikroTik содержит только буквенно-цифровые символы и дефисы. Также убедитесь, что длина имени не превышает 19 символов (подробности см. в задаче). Аналогичные проблемы могут возникать из-за неподдерживаемых символов в имени пользователя.
  2. Модуль community.routeros.command не поддерживает вложенные команды и ожидает, что каждая команда начинается с косой черты (/). Выполнение следующей команды приведёт к ошибке:

    - community.routeros.command:
        commands:
          - /ip
          - print
    
  3. При использовании модуля community.routeros.command не указывайте слишком длинные команды. В качестве альтернативы добавьте к имени пользователя что-нибудь вроде +cet512w (заменив admin на admin+cet512w), чтобы указать RouterOS не переносить строки до достижения 512 символов (подробности см. в задаче).
  4. По умолчанию плагин подключения ansible.netcommon.network_cli использует paramiko для подключения к устройствам по SSH. Чтобы вместо него использовать ansible-pylibssh, предоставляющий привязки Python для libssh, установите для его параметра ssh_type значение libssh. Подробности см. в документации.
  5. Пользователю не разрешено входить по SSH с помощью пароля на современные устройства Mikrotik, если для этого пользователя добавлен SSH-ключ!

Настройка инвентаря

Пример файла инвентаря hosts для устройства RouterOS:

[routers]
router ansible_host=192.168.2.1

[routers:vars]
ansible_connection=ansible.netcommon.network_cli
ansible_network_os=community.routeros.routeros
ansible_user=admin
ansible_ssh_pass=test1234

Это сообщает Ansible, что у вас есть устройство RouterOS с именем router и IP-адресом 192.168.2.1. Ansible должен использовать плагин подключения ansible.netcommon.network_cli вместе с плагином cliconf community.routeros.routeros. Учетные данные хранятся в инвентаре под именами ansible_user и ansible_ssh_pass.

Подключение к устройству

Имея приведённый выше инвентарь, можно использовать следующий плейбук для выполнения на устройстве команды /system resource print

---
- name: RouterOS test with network_cli connection
  hosts: routers
  gather_facts: false
  tasks:

    - name: Gather system resources
      community.routeros.command:
        commands:
          - /system resource print
      register: system_resource_print

    - name: Show system resources
      debug:
        var: system_resource_print.stdout_lines

    - name: Gather facts
      community.routeros.facts:

    - name: Show a fact
      debug:
        msg: "First IP address: {{ ansible_net_all_ipv4_addresses[0] }}"

В результате будет получен следующий вывод:

PLAY [RouterOS test with network_cli connection] *****************************************************************

TASK [Gather system resources] ***********************************************************************************
ok: [router]

TASK [Show system resources] *************************************************************************************
ok: [router] => {
    "system_resource_print.stdout_lines": [
        [
            "uptime: 3d10h28m51s",
            "                  version: 6.48.3 (stable)",
            "               build-time: May/25/2021 06:09:45",
            "              free-memory: 31.2MiB",
            "             total-memory: 64.0MiB",
            "                      cpu: MIPS 24Kc V7.4",
            "                cpu-count: 1",
            "            cpu-frequency: 400MHz",
            "                 cpu-load: 1%",
            "           free-hdd-space: 54.2MiB",
            "          total-hdd-space: 128.0MiB",
            "  write-sect-since-reboot: 927",
            "         write-sect-total: 51572981",
            "               bad-blocks: 1%",
            "        architecture-name: mipsbe",
            "               board-name: RB750GL",
            "                 platform: MikroTik"
        ]
    ]
}

TASK [Gather facts] **********************************************************************************************
ok: [router]

TASK [Show a fact] ***********************************************************************************************
ok: [router] => {
    "msg": "First IP address: 192.168.2.1"
}

PLAY RECAP *******************************************************************************************************
router                     : ok=4    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/collections/community/routeros/docsite/ssh-guide.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API