返回网络交换设备序列号的脚本

返回网络交换设备序列号的脚本

我的任务是对一个非常大的网络进行调查和清点。我特别需要获取 1000 多个 Avaya 交换机和路由器的序列号。所有这些都可以从我的工作站通过 telnet 或 ssh 访问。几乎所有这些都可以使用相同的用户名和密码进行访问。有些仅具有 telnet 访问权限,有些仅具有 ssh 访问权限。

登录后,我可以获得这样的序列号:

en[crlf](启用 cli 命令模式)

show tec[crlf](返回设备的技术信息)

[3x spacebar](以确保显示序列号)

q(停止显示更多数据并返回cli提示)

exit[crlf](结束终端会话)

从生成的输出中,我可以 grep 序列号。

所以我的问题是在 bash 脚本或类似的脚本中自动执行此操作,以根据给定的设备 IP 地址生成序列号列表。

理想情况下,脚本应该:

1.从文件中读取设备的IP地址。

2.尝试使用 ssh 凭据 1 登录(如果失败,请尝试凭据 2)

3.如果失败,telnet凭据1(如果失败,尝试凭据2)

4.如果全部失败,则将“登录失败”写入输出文件。

5.如果成功,将设备IP地址和序列号写入输出文件。

6. 对列表中的下一个设备 IP 重复此操作。

7.在这种情况下使用纯文本用户名和密码不是问题。

我在我的工作站上使用最新的 Ubuntu Linux。

希望有人能给我一些完成这项任务的建议。我不希望手动登录 1000 个交换机。

答案1

对于交互式 CLI 流程的自动化,您可以使用“Expect”或其替代方案:https://en.wikipedia.org/wiki/Expect。最简单的 Expect 脚本示例:

spawn telnet foo.bar.com 
expect ogin {send luser\r}
expect assword {send TopSecret\r}
send "who am i\r" 
send "exit\r"
expect eof

相关内容