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.
Você tem que usar o putty do Windows? Vindo de uma caixa Linux, eu faria
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):
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.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.
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.