#命令行 #Cisco #网络 #命令行工具 #cml

bin+lib cmlterm

一款命令行工具,可在 Cisco Modeling Labs (CML)(前称 VIRL2)中连接到 Cisco 设备控制台(支持基本的脚本功能)

1 个不稳定版本

0.6.3 2021 年 5 月 30 日

#172模拟

MIT 许可证

200KB
4.5K SLoC

cmlterm

CML 设备的命令行界面。

改进 CML 内置的 SSH 命令行

  • 正确处理 home/end/delete/ctrl-left/right 等键
  • 将命令通过 stdin 管道输入,从 stdout 清除结果
  • 通过命令行指定设备(通过实验室/设备 ID 或名称)
    • 命令行补全(仅限 bash,见下文)
  • 将当前终端的标题设置为当前设备的提示符

用法

使用 cmlterm --help 可以获取详细信息帮助

行号默认为 0,如果需要,请将 /<行号> 添加到设备路径的末尾。

通过 ID 打开设备

cmlterm open /abcde/n2

或者,通过名称

cmlterm open "/3-Site VPN/FW2"

身份验证

使用三个环境变量

  • CML_HOST:CML 实例可访问的 IP 地址或主机名。
  • CML_USER:用于登录 CML 的用户名。
  • CML_PASS64:用户密码的 base-64 编码版本(首选,尽管不应依赖其安全性)
  • CML_PASS:用户密码的明文版本(不推荐使用)

命令行补全

  • 目前仅支持 bash,尽管鼓励提交 PR
  • 支持纯文本和单引号字符串(意思是:不会完成双引号字符串)
  • 需要特殊安装步骤,请参阅下面的安装部分

安装

目前在 GitHub 上不提供预构建的二进制文件。

  • 如果尚未安装 Rust,请首先安装 Rust 工具链:https://rustup.rs/
  • cmlterm 可以使用以下命令安装
cargo install cmlterm --git https://github.com/csm123199/cml-rs --branch main

对于 bash 自动补全,您可以在您的 shell 中执行补全包装器。您可以通过将其添加到 .profile 在任何新用户 shell 中使用它。

echo 'source <(cmlterm --completions bash)' >> .profile

基本脚本

命令可以输入(特别是,输入不是一个交互式终端),通过行分隔。每行依次发送到设备,默认情况下,每行在执行前等待下一个提示符出现,以防止命令消失。脚本在标准输入关闭并显示下一个提示符后结束。管道输入支持以下前缀来更改此行为:(使用反斜杠在它们之前使用作为字面行前缀)

  • 在一行前面加上波浪号 ~ 在发送之前不会等待下一个提示符。这可能有助于自动化交互式命令。
  • 在一行前面加上带引号的字符串(`asd`)将在发送行之前等待引号字符串出现(特别是在终端输出的最后256字节中)。
  • (尚未实现)一个前缀可以覆盖默认的提示符超时

脚本编程

这些控制命令可以堆叠以相互交互,每个命令都按顺序放在行的开头。如果您想在行开头使用这些字符之一,请用反斜杠转义它。没有以下任何字符跟随的反斜杠将被字面发送。如果以这些控制序列开头的行解析不正确,它将被字面发送。

  • ~ - 在发送命令之前不等待下一个提示符。(优先于超时行为)
  • ! - 在行末不输出换行符
  • `64:text` - 在最后N个字节的滚动缓冲区中,等待指定的文本出现
  • %20000% - 将默认超时更改为指定的毫秒数,对于此命令。如果超时后没有提示符或预期文本,则仍然发送该行。

任何动态的或比这更有趣的内容可能需要包装 cmlterm 输入/输出以调整输入脚本。如果这样做,您可能想访问同一项目中(WIP)的 cmlscript 二进制文件,以获取更丰富的设备信息和更易于终端多路复用。

依赖项

~20–38MB
~618K SLoC