AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 752890
Accepted
Sabre
Sabre
Asked: 2016-01-31 09:19:40 +0800 CST2016-01-31 09:19:40 +0800 CST 2016-01-31 09:19:40 +0800 CST

将 SSH 会话的命令输出转储到 procurve

  • 772

我正在尝试从 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

上面有两个空行来执行两个“任意键”并继续“请求。

非常感谢任何帮助。

networking
  • 2 2 个回答
  • 1476 Views

2 个回答

  • Voted
  1. Law29
    2016-01-31T12:18:56+08:002016-01-31T12:18:56+08:00

    您必须使用 Windows 中的腻子吗?来自Linux机器,我要么做

    ( echo $password ; echo ; echo ; echo show mac-address ) \
    | ssh -l $user xxx.xxx.xxx.xxx
    

    或者如果这不起作用,我会使用该程序expect。事实上,有一个 Windows 版本的 expect 可以用来代替 plink。

    期望语法示例在我的脑海中出现变化的开关输出(应该使用或不使用“按任意键”,但当然我没有测试过):

    #!/usr/bin/expect -f
    spawn ssh -l loginuser [lindex $argv 0]
    
    set timeout 600
    
    while (1) {
        expect "Press any key to continue" { send "\n" }
               "Enter switch number to connect to or <CR>:" { send "password\n" }
               "#" { break }
    }
    
    send "show mac-address\n"
    
    expect "#"
    
    send "quit\n"
    
    expect eof
    

    但是按照 Paul 的建议并尝试一下autoexpect,它会让您运行脚本并输出执行相同操作的期望脚本。然后您获取该输出并将交换机的名称或 IP 替换为[lindex $argv 0],并使用交换机的名称作为参数执行它。

    • 1
  2. Best Answer
    Sabre
    2019-11-07T17:30:52+08:002019-11-07T17:30:52+08:00

    我从来没有让这个按预期工作,而且我很长时间没有回到这个网站,但是由于这个问题似乎很受欢迎,我决定发布我最终做了什么。

    我在设备上启用了 telnet,并使用以下和 NCAT 对其进行伪脚本 telnet 样式命令。

    这使我可以向 TFTP 发出复制命令,并让交换机将数据发送回给我,而不是尝试从返回的输出中解析它。当然,我不想对密码等进行硬编码,并使其可重用于未来的需要。它让我解决了我遇到的问题。:-)

    switch.txt 只是一个 IP 地址列表,我不得不使用 NCAT 7.40 作为过去的版本,它有一个错误阻止它正常工作。

    @ECHO OFF
    IF !%1!==!! GOTO no
    IF !%2!==!! GOTO no
    FOR /F "delims=" %%s IN (switches.txt) DO (
        ECHO admin> CMDS
        ECHO %2>> CMDS
        ECHO(>>CMDS
        ECHO(>> CMDS
        ECHO copy command 'show mac-address' tftp %1 %%s.txt>> CMDS
        ECHO exit>> CMDS
    NCAT -t --send-only %%s 23 < CMDS
    )
    DEL CMDS 1>nul 2>nul
    GOTO ext
    :no
    ECHO ^</NO!^>
    :ext
    

    当然,这不像 SSH 方法那样安全,事实上,除非您知道流量没有被拦截,否则我不建议这样做,因为它很容易被嗅探(包括凭据),但它非常实用。使用专用 VLAN 和专门用于自动化的单独子网可以在一定程度上减轻这种情况。认为它可能有助于其他尝试自动化此类繁琐任务的人。如果没有其他我说明哪里有意志和系统管理员,那么即使它是一个肮脏的解决方案,也有一个解决方案。希望它可以帮助别人。

    • 0

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve