AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 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

Despejando a saída do comando da sessão SSH para procurve

  • 772

Estou tentando obter informações do comando "show mac-address" de uma coleção de 12 switches procurve em 2 locais diferentes, todos conectados via fibra PTP. Quero importar isso para o SQL para alguns relatórios programados de estatísticas, movimento, rotas, etc. é.

Eu tenho todos os componentes deste funcionamento, exceto o fato de eu ter que pegar manualmente os dados por switch usando massa, salvá-los em um diretório onde uma tarefa agendada formata os despejos em csv, limpa-os e importa-os usando BULK INSERT.

Agora quero automatizar a recuperação dos dados dos switches para poder me concentrar no lado dos dados e parar de gastar tanto tempo no lado da coleta.

Eu tentei o PLINK, no entanto, parece haver algum tipo de problema de emulação em que os dados são interpretados como o formato incorreto e recebo arquivos cheios de rabiscos.

usando...

plink -batch -ssh -l <username> -pw <password> xxx.xxx.xxx.xxx < cmds.txt > out.txt

os switches estão em pilhas, então eu tenho que passar pelas mensagens "not hp management" e "what switch do you want to log in", isso parece funcionar apenas com \n\n no arquivo (o mesmo que eu faria quando eu entrar no putty, entrar duas vezes) Mas, além disso, recebo longas sequências ASCII que parecem estranhas porque tudo até esse ponto parece funcionar sem problemas.

Já aceitei a chave no putty e, novamente, como estou recebendo todas as mensagens de login e do comandante da pilha, estou assumindo que tudo isso está funcionando.

Alguma pista sobre como fazer isso funcionar ou uma alternativa razoável para conseguir o mesmo?

Exemplo do que estou recebendo...

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#

Portanto, estou chegando ao prompt do Switch1# no console do switch.

meu arquivo de entrada é no momento apenas

show mac-address

Com duas linhas em branco acima para executar as duas solicitações "qualquer tecla" e "continuar".

Qualquer ajuda muito apreciada.

networking
  • 2 2 respostas
  • 1476 Views

2 respostas

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

    Você tem que usar o putty do Windows? Vindo de uma caixa Linux, eu faria

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

    ou se isso não funcionar, eu usaria o programa expect. Na verdade, existe uma versão do expect para Windows que você provavelmente poderia usar em vez do plink.

    Espere um exemplo de sintaxe em cima da minha cabeça com saída variável do switch (deve funcionar com ou sem o "pressione qualquer tecla", mas é claro que não testei nada):

    #!/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
    

    Mas faça como Paul sugeriu e experimente autoexpect, ele permitirá que você execute seu script e gere o script esperado que fará a mesma coisa. Em seguida, pegue essa saída e substitua o nome ou IP do switch por [lindex $argv 0], e execute-o com o nome do switch como argumento.

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

    Nunca fiz isso funcionar como esperado e não volto ao site há muito tempo, mas como a pergunta parecia popular, decidi postar o que acabei fazendo no final.

    Ativei o telnet nas unidades e usei o seguinte e NCAT para psudo script comandos de estilo telnet para ele.

    Isso me permitiu emitir um comando de cópia para TFTP e fazer com que os switches enviassem os dados de volta para mim, em vez de tentar analisá-los a partir da saída retornada. É claro que eu não queria codificar senhas, etc, e torná-lo reutilizável para necessidades futuras. Isso me ajudou a superar os problemas que eu estava tendo. :-)

    switches.txt era apenas uma lista de endereços IP, e tive que usar o NCAT 7.40 como versões anteriores que possuem um bug que o impedia de funcionar corretamente.

    @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
    

    Agora, é claro que isso não é tão seguro quanto o método SSH, na verdade, a menos que você saiba que o tráfego não está sendo interceptado, não o sugiro, pois é facilmente detectado (incluindo credenciais), mas foi muito funcional. Isso pode ser um pouco reduzido com uma VLAN dedicada e uma sub-rede separada dedicada apenas à automação. Achei que poderia ajudar outras pessoas tentando automatizar essas tarefas tediosas. Se nada mais eu ilustrar onde há uma vontade e um administrador de sistema, existe uma solução, mesmo que seja suja. Espero que isso ajude mais alguém.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve