如何使用Ansible对运行VXWorks的老旧设备执行SSH命令与文件传输?
用Ansible管理VXWorks老旧设备的解决方案
当然可以用Ansible搞定你的VXWorks设备自动化!针对你提到的三个核心问题,我给你逐个拆解:
1. 登录非Linux设备执行命令
完全没问题!Ansible的raw模块就是专门为这种没有Python环境的老旧/非Linux设备设计的——它不需要目标机器安装任何Ansible依赖,直接通过SSH执行原始命令。
配置要点:
在你的inventory文件里,给VXWorks设备指定SSH连接参数:
[vxworks_devices] device1 ansible_host=192.168.1.10 ansible_user=admin ansible_password=your_pass ansible_connection=ssh
Playbook示例:
- name: Execute show commands on VXWorks hosts: vxworks_devices gather_facts: no # 关闭事实收集,因为VXWorks不支持 tasks: - name: Run show system info raw: show system info register: system_info - name: Print command output debug: msg: "{{ system_info.stdout }}"
如果你的设备提示符非标准,偶尔遇到交互式场景(比如需要确认操作),可以搭配expect模块来处理,不过大部分show类命令是非交互式的,用raw就足够了。
2. 执行SCP/SFTP文件下载
可以实现!Ansible的fetch模块能通过SSH(依赖远程设备支持SCP/SFTP子系统)将文件从VXWorks设备拉取到本地。如果需要上传文件,因为VXWorks没有Python,你可以用raw模块直接执行scp命令。
下载文件示例(fetch模块):
- name: Fetch log file from VXWorks hosts: vxworks_devices gather_facts: no tasks: - name: Pull system log to local fetch: src: /var/log/system.log # 远程设备的文件路径 dest: ./vxworks_logs/ # 本地保存目录(会自动创建主机名子目录) flat: yes # 可选:如果不想生成主机名子目录,直接保存文件
上传文件示例(raw模块+scp):
- name: Upload config file to VXWorks hosts: vxworks_devices gather_facts: no tasks: - name: Copy local config to remote raw: scp /local/path/new_config.cfg {{ ansible_user }}@{{ ansible_host }}:/remote/path/ delegate_to: localhost # 让本地执行scp命令
3. 获取show类命令的原始输出
非常简单!不管用raw还是command模块,命令的原始标准输出都会被保存在模块返回结果的stdout字段里。你只需要用register关键字把结果存到变量里,之后就可以直接调用这个变量的stdout属性。
示例:
- name: Capture raw show output hosts: vxworks_devices gather_facts: no tasks: - name: Run show interface status raw: show interface status register: if_status - name: Display raw output debug: var: if_status.stdout # 也可以把输出保存到本地文件 - name: Save output to local file copy: content: "{{ if_status.stdout }}" dest: ./vxworks_if_status.log delegate_to: localhost
额外注意事项
- 确保你的VXWorks设备的SSH服务器支持SCP/SFTP子系统(大部分老旧设备的SSH服务都带这个功能,如果不行可以手动确认)
- 如果遇到SSH连接的特殊问题,可以在inventory里添加
ansible_ssh_common_args参数调整SSH选项,比如跳过主机密钥检查:ansible_ssh_common_args="-o StrictHostKeyChecking=no"
内容的提问来源于stack exchange,提问作者NerdGuy021
相关产品推荐
相关产品推荐

