【问题标题】:Is there a way to run a script of Cisco IOS commands?有没有办法运行 Cisco IOS 命令的脚本?
【发布时间】:2020-04-12 06:05:20
【问题描述】:

用例: 在 AWS 上为 Cisco CSR v1000 路由器创建 VPN,根据 AWS 生成的值生成一系列命令,替换模板中的令牌,配置路由器,然后保存startup-config - 以完全自动化的方式,从开发人员的笔记本电脑上完成。

我自己从一组我需要按顺序应用的命令中配置路由器,这就是我在网上搜索这个问题时看到的 - 我 ssh 进入路由器,然后“config t ",然后我手动粘贴命令。我不想进行这种手动剪切和粘贴操作 - 我想在路由器本身或我的笔记本电脑上运行语句,以将脚本中的命令应用于路由器配置 - 而不是必须剪切并粘贴它们。

我想我会在这里列出我到目前为止所想出的东西,因为很难找到如何在一个地方简单地完成这么多事情。以下假设适用:

  • 我有一个 ~/.ssh/config 文件,它简化了我需要在命令行上指定的内容
  • 这会将用户作为 ec2-user 提供,并指定正确的 SSH 密钥。
  • 我正在使用 ssh-agent,它为我提供 SSH 密钥密码
  • 本示例中路由器的 FQDN 是 csr01.mydomain.com
  • 我要运行的命令集在 csr01-apply-config.cfg 中
  • 我想将此文件上传到路由器,然后最好在一个操作中应用文件中的所有命令,因为此脚本可能需要进行更改,这可能会暂时中断连接
  • 我想将所有此类应用文件存储在 flash:apply-configs 目录中

这就是我目前所拥有的——只是错过了一个关键步骤:

  1. 列出闪存中的文件:文件系统

    # ssh csr01.mydomain.com dir flash:
    
  2. 列出 nvram 中的文件:文件系统

    # ssh csr01.mydomain.com dir nvram:
    
  3. 创建一个目录来保存上传的配置应用文件
    # ssh csr01.mydomain.com mkdir flash:apply-configs
    
  4. 上传生成的配置应用文件
    # scp csr01-apply-config.cfg csr01.mydomain.com:flash:/apply-configs/csr01-apply-config.cfg
    
  5. 确认上传的文件存在
    # ssh csr01.mydomain.com dir flash:apply-configs
    
  6. 应用命令
    >>>>>>>>>> 我如何在此处的文件中运行命令
    例如,类似:

    # run flash:/apply-configs/csr01-apply-config.cfg
    

    看起来应该很简单,但我似乎找不到任何描述 如果这是可能的,如果可以,使用什么命令

  7. 显示运行配置

    # ssh csr01.mydomain.com show run
    
  8. 将运行配置写入内存
    # ssh csr01.mydomain.com write mem
    
  9. 将启动配置复制回笔记本电脑
    # scp csr01.mydomain.com:nvram:startup-config csr01-startup-config-$(date +%Y%m%d-%H%M).cfg
    

【问题讨论】:

    标签: cisco-ios


    【解决方案1】:

    您可以使用一个小的 Python 脚本。 对于 SSH 部分,我个人觉得 python netmiko 库非常有用。 你可以这样做(摘自 github 页面):

    from netmiko import ConnectHandler
    
    cisco_881 = {
        'device_type': 'cisco_ios',
        'host':   '10.10.10.10',
        'username': 'test',
        'password': 'password',
        'port' : 8022,          # optional, defaults to 22
        'secret': 'secret',     # optional, defaults to ''
    }
    
    # Establish an SSH connection to the device by passing in the device dictionary.
    net_connect = ConnectHandler(**cisco_881)
    # Execute show commands.
    output = net_connect.send_command('show ip int brief')
    print(output)
    

    【讨论】:

    • 如果您有大量命令,这可能会很慢。
    • 显然,因为它是一个 I/O 绑定任务。只需使用线程或任务队列来并行化它。
    猜你喜欢
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    • 2022-10-21
    • 2011-12-25
    相关资源
    最近更新 更多