Как подключаться к устройствам RouterOS по SSH
Коллекция предоставляет два модуля для подключения к устройствам RouterOS по SSH:
- Модуль community.routeros.facts собирает сведения об устройстве RouterOS;
- Модуль community.routeros.command выполняет команды на устройстве RouterOS.
Для этого модулям необходим плагин подключения ansible.netcommon.network_cli.
Важные замечания
- Модули, использующие SSH, не поддерживают произвольные символы в имени устройства. Если у вас возникли проблемы с подключением к устройству, убедитесь, что имя вашего MikroTik содержит только буквенно-цифровые символы и дефисы. Также убедитесь, что длина имени не превышает 19 символов (подробности см. в задаче). Аналогичные проблемы могут возникать из-за неподдерживаемых символов в имени пользователя.
-
Модуль community.routeros.command не поддерживает вложенные команды и ожидает, что каждая команда начинается с косой черты (
/). Выполнение следующей команды приведёт к ошибке:- community.routeros.command: commands: - /ip - print - При использовании модуля community.routeros.command не указывайте слишком длинные команды. В качестве альтернативы добавьте к имени пользователя что-нибудь вроде
+cet512w(заменивadminнаadmin+cet512w), чтобы указать RouterOS не переносить строки до достижения 512 символов (подробности см. в задаче). - По умолчанию плагин подключения ansible.netcommon.network_cli использует paramiko для подключения к устройствам по SSH. Чтобы вместо него использовать ansible-pylibssh, предоставляющий привязки Python для libssh, установите для его параметра
ssh_typeзначениеlibssh. Подробности см. в документации. - Пользователю не разрешено входить по 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