我正在尝试从 2 个不同位置的 12 个 procurve 交换机的集合中获取命令“show mac-address”的信息,这些交换机都通过光纤 PTP 连接。我想将其导入 SQL 以获取一些统计、移动、路线等的预定报告……我已经设法生成了一些非常有趣和有用的数据,这些数据最终将允许我将我继承的这个怪物变成更少的怪物是。
我有这个工作的所有组件,除了我必须使用 putty 手动获取每个开关的数据,将它们保存在计划任务将转储格式化为 csv 的目录中,清理它们,并使用 BULK INSERT 导入它们。
现在我想自动从交换机检索数据,这样我就可以专注于数据方面,而不再在收集方面花费太多时间。
我尝试过 PLINK,但似乎存在某种仿真问题,其中数据被解释为不正确的格式,并且我得到的文件充满了乱码。
使用...
plink -batch -ssh -l <username> -pw <password> xxx.xxx.xxx.xxx < cmds.txt > out.txt
开关在堆栈中,所以我必须通过“不是 hp 管理”消息和“你想登录哪个开关”提示,这似乎只适用于文件中的 \n\n(和我一样当我登录腻子时,会输入两次)但过去我得到了长长的 ASCII 序列,这看起来很奇怪,因为到目前为止的一切都可以正常工作。
我已经接受了 putty 中的密钥,并且再次因为我收到了所有登录和堆栈指挥官消息,我假设所有这些都有效。
关于如何使其工作或实现相同目标的合理替代方案的任何线索?
我得到的例子......
HP J9148A 2910al-48G-PoE Switch
Software revision W.15.13.0005
Copyright (C) 1991-2014 Hewlett-Packard Development Company, L.P.
RESTRICTED RIGHTS LEGEND
Confidential computer software. Valid license from HP required for possession,
use or copying. Consistent with FAR 12.211 and 12.212, Commercial Computer
Software, Computer Software Documentation, and Technical Data for Commercial
Items are licensed to the U.S. Government under vendor's standard commercial
license.
HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P.
20555 State Highway 249, Houston, TX 77070
Non-HP transceiver detected, which may cause network problems.
Use 'show interface transceiver' command for details.
HP will not support or troubleshoot problems with these transceivers.
[1;15r[1;1H[24;1HPress any key to continue[15;1H[?25h[24;27H[2J[?7l[1;15r[?6l[24;27H[?25h[23;1H Stack Members
SN MAC Address System Name Device Type Status
-- ------------- ------------- -------------------- -------------------------
0 xxxxxx-xxxxxx Switch1 HP 2910al-48G-PoE Commander Up
1 xxxxxx-xxxxxx Switch2 HP 2910al-48G Member Up
2 xxxxxx-xxxxxx Switch3 HP 2910al-24G-PoE Member Up
[23;1HEnter switch number to connect to or <CR>:[23;1H[23;44H[?25h[23;1H[?25h[23;44H[?6l[1;24r[?7l[2J[1;1H[1920;1920H[6n[1;1HYour previous successful login (as manager) was on 2016-01-29 19:31:41
from xx.x.x.xxx
[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1# [24;1H[24;11H[24;1H[?25h[24;11H[24;0HE[24;1H[24;11H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1# [24;1H[24;11H[24;1H[?25h[24;11H[24;0HE[24;1H[24;11H[24;1H[2K[24;1H[?25h[24;1H[1;24r[24;1H[1;24r[24;1H[24;1H[2K[24;1H[?25h[24;1H[24;1HSwitch1#
所以我在开关控制台上得到了 Switch1# 提示。
我的输入文件目前只是
show mac-address
上面有两个空行来执行两个“任意键”并继续“请求。
非常感谢任何帮助。
您必须使用 Windows 中的腻子吗?来自Linux机器,我要么做
或者如果这不起作用,我会使用该程序
expect
。事实上,有一个 Windows 版本的 expect 可以用来代替 plink。期望语法示例在我的脑海中出现变化的开关输出(应该使用或不使用“按任意键”,但当然我没有测试过):
但是按照 Paul 的建议并尝试一下
autoexpect
,它会让您运行脚本并输出执行相同操作的期望脚本。然后您获取该输出并将交换机的名称或 IP 替换为[lindex $argv 0]
,并使用交换机的名称作为参数执行它。我从来没有让这个按预期工作,而且我很长时间没有回到这个网站,但是由于这个问题似乎很受欢迎,我决定发布我最终做了什么。
我在设备上启用了 telnet,并使用以下和 NCAT 对其进行伪脚本 telnet 样式命令。
这使我可以向 TFTP 发出复制命令,并让交换机将数据发送回给我,而不是尝试从返回的输出中解析它。当然,我不想对密码等进行硬编码,并使其可重用于未来的需要。它让我解决了我遇到的问题。:-)
switch.txt 只是一个 IP 地址列表,我不得不使用 NCAT 7.40 作为过去的版本,它有一个错误阻止它正常工作。
当然,这不像 SSH 方法那样安全,事实上,除非您知道流量没有被拦截,否则我不建议这样做,因为它很容易被嗅探(包括凭据),但它非常实用。使用专用 VLAN 和专门用于自动化的单独子网可以在一定程度上减轻这种情况。认为它可能有助于其他尝试自动化此类繁琐任务的人。如果没有其他我说明哪里有意志和系统管理员,那么即使它是一个肮脏的解决方案,也有一个解决方案。希望它可以帮助别人。