我的任务是对一个非常大的网络进行调查和清点。我特别需要获取 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