如何通过 SSH 连接到 RouterOS 设备
该集合提供了两个模块,用于通过 SSH 连接到 RouterOS 设备
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 连接到设备。您可以将其
ssh_type
选项设置为libssh
,以改用 ansible-pylibssh,后者为 libssh 提供 Python 绑定。请参阅其文档了解详细信息。如果为用户添加了 SSH 密钥,则不允许用户通过密码以 SSH 方式登录到现代 Mikrotik!
设置清单
RouterOS 设备的示例清单 hosts
文件如下
[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 您有一个名为 router
的 RouterOS 设备,其 IP 为 192.168.2.1
。Ansible 应使用 ansible.netcommon.network_cli 连接插件 以及 community.routeros.routeros cliconf 插件。凭据以 ansible_user
和 ansible_ssh_pass
的形式存储在清单中。
连接到设备
使用上面的清单,您可以使用以下 playbook 在设备上执行 /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