Página 1 de 2 12 ÚltimoÚltimo
+ Responder ao Tópico



  1. #1

    Padrão Telnet dentro de um script, tem como?

    Ola pessoal!


    Me desculpem de solicitar ajuda denovo 'e que nesse caso nem sei por onde comecar.

    Meu Chefe me pedio um script que tem que dar um telnet em um hardware de telefonia e resetar o mesmo

    O hardware 'e facil de resetar so precisa escrever R e enter ! Pronto!

    Mas deixa eu escrever aqui o que ele quer



    O Script tem que

    Telnet (ip do Hardware)
    Colocar Senha.

    Resetar o Hardware R + Enter

    Apos resetar , esperar por 2 minutos .


    Pingar o Hardware e com o resultado do ping gerar um log

    Mandar um email com o resultado do log.

    Esse 'e o Script , o problema 'e que nao sei como vou fazer para usar o Telnet e fazer o meu Script esperar por 2 minutos , pigar e gerar um log.

    Estou bem perdido nessa.

    POR FAVOR ME AJUDEM!!!

    Abraco


    Daniel

  2. #2

    Thumbs up Acho que posso ajudar :)

    Axo que tenho uma possivel solução pra vc a alguns meses desenvolvi algo parecido mas para se comunicar o com Mikrotik e graças a Deus esta funcionando perfeitamente... utilizei PHP para fazer esta comunicação ... vou te passar a bola aqui agora ...

    vc vai precisar da Classe TELNET feita em PHP que é a seguinte:
    http://walcan.icenet.com.br/TELNET/telnetmodule.php.inc

    Com este Script vc eh capaz de fazer o seguinte

    crie um outro php por exemplo - executa.php e dentro dele coloque
    <?
    include("telnetmodule.php.inc");

    $username="LOGINTELNET"; //LOGIN PARA CONEXAO AO TELNET
    $password="SENHATELNET"; //SENHA DE CONEXAO AO TELNET
    $microtikserver="192.168.0.15"; //IP do HOST a Receber o Comando TELNET

    $tn = new telnet("$microtikserver",23);
    $tn->read_till("ogin: ");
    $tn->write("$username\r\n");
    $tn->read_till("word: ");
    $tn->write("$password\r\n");
    $tn->read_till(">");
    $tn->write("R\r"); //LINHA DO SEU COMANDO --- JAH COLOQUEI o SEU COMANDO Aí DENTRO
    $online=$tn->read_till("\n\n");
    $tn->close();


    ?>

    Cara eu axo que isso aqui jah funciona pelo menos para dar o RESET
    Agora eh soh vc dar um sleep de X segundos e tentar fazer um PING

    Espero ter Ajudado !!!

    Abraços amigo

  3. #3

    Padrão

    A outra possibilidade que você tem é de usar o expect para fazer a conexão com o telnet e enviar os comandos que você precisa pro teu hardware.

    Eu uso o expect principalmente para gerenciar ativos CISCO.

  4. #4

    Padrão

    Ola meus amigo!


    Muito obrigado pelas dicas , gostei mesmo desse expect, porem nao entendi direito.
    Tenho que ter ele instalado na minha maquina?

    Achei isso na Net , porem ainda nao entendi o sentido da coisa , sera que tem como vc me dar uma explicao breve?

    set timeout 20 #If it all goes pear shaped the script will timeout after 20 seconds.
    set name [lindex $argv 0] #First argument is assigned to the variable name
    set user [lindex $argv 1] #Second argument is assigned to the variable user
    set password [lindex $argv 2] #Third argument is assigned to the variable password

    spawn telnet $name #This spawns the telnet program and connects it to the variable name

    expect "login:" #The script expects login
    send "$user " #The script sends the user variable
    expect "Password:" #The script expects Password
    send "$password " #The script sends the password variable
    interact #This hands control of the keyboard over two you (Nice expect feature!)


    Honestamente so preciso que o Script faca um telnet nesse hardware que nao tem nome de usuario so pede por senha, e depois dentro do Telnet preciso digitar R e enter.
    Pronto , acabou meu script.

    Please me ajudem


    Grato


    Daniel

  5. #5

    Thumbs up

    Código :
    set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
    set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
    set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)
     
    spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip
     
    expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente 
                              # o prompt que aparece para você quando abre o telnet para o hardware
    send "$senha" # O script envia o conteúdo da variável senha
    send "R\n" # O script envia o comando R seguido de "Enter"

    Tá aí o seu script. Você pode chamar ele de dentro de um script bash e fazer no bash as outras interações que você precisa, por exemplo, de esperar os 2 minutos e fazer o ping pro equipamento e gravar as informações do ping em um arquivo e enviar por e-mail.

  6. #6

    Padrão

    Ola Amigo!


    Muito Obrigado mesmo pela ajuda que vc tem me dado , vc ja me ajudou tb com outro script.

    Porem sou novato mesmo com Shell e Script , tenho estudado , mas ainda para mim 'e um mundo novo , mas sei que com tempo chego la.

    Bom me desculpe a minha falta de conhecimento , mas continuo nao entendendo o que devo fazer , coloquei essas informacoes no meu script que ficou assim :


    set timeout 20 #O script vai interromper a execução em 20 segundos se algo der errado
    set ip [lindex $192.168.20.111 0] #O primeiro argumento da linha de comando vai ser associado a variável IP
    set senha [lindex $e!wk97buws35@ 1] #O segundo argumento vai ser associado a variavel senha (senha do hardware)

    spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

    expect "Password:" #O script espera pelo prompt "Password:", configure aqui exatamente
    #o prompt que aparece para você quando abre o telnet para o hardware
    send "$senha" #O script envia o conteúdo da variável senha
    send "R\n" #O script envia o comando R seguido de "Enter"


    Porem quando rodo o script , recebo esses erros, segue abaixo :

    [root@abreu scripts]# ./etmresetnew.sh
    ./etmresetnew.sh: line 17: spawn: command not found
    ./etmresetnew.sh: line 19: expect: command not found
    ./etmresetnew.sh: line 21: send: command not found
    ./etmresetnew.sh: line 22: send: command not found


    Gostaria de saber pq e me da um erro ed command not found?

    Novamente , sou muito grato pela ajuda e me desculpe pela falta de conhecimeto!


    Granto



    Daniel

  7. #7

    Padrão

    o código que te passei é um código expect e não bash, você vai colocar ele em um arquivo chamado etmreset.exp:
    Código :
    #!/bin/env expect -f
    set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
    set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
    set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)
     
    spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip
     
    expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente 
                              # o prompt que aparece para você quando abre o telnet para o hardware
    send "$senha" # O script envia o conteúdo da variável senha
    send "R\n" # O script envia o comando R seguido de "Enter"

    No seu script bash, você vai colocar o seguinte:

    Código :
    #!/bin/bash
     
    ./etmreset.exp 192.168.20.111 e!wk97buws35@

    Tenta primeiro isso, depois incrementamos seu script.

  8. #8

    Padrão

    Frederico

    VALEU MESMO pelas ajudas!

    Mais ainda nao entendo , fiz tudo que me pedio mas ainda encontro esses erros abaixo:

    [root@abreu scripts]# ./gsr.sh
    ./etmreset.exp: line 11: spawn: command not found
    couldn't read file "Password:": no such file or directory
    ./etmreset.exp: line 15: send: command not found
    ./etmreset.exp: line 16: send: command not found
    [root@abreu scripts]#

    O que estou fazendo de errado?
    nao tenho nem ideia!

    Abraco


    Daniel

  9. #9
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    dlabreu

    execute
    Código :
    whereis expect
    achando o path do expect por exemplo /bin/expect ou /usr/bin/expect

    adicione no topo do seu script

    #!/usr/bin/expect -f

    os comandos que deram erro so irao funcionar se estiverem executados pelos expect

  10. #10

    Padrão

    Ola Meu amigo!

    Fiz exatamente o que vc falou e os erros continuam .


    vou colar aqui

    [root@abreu scripts]# whereis expect
    expect: /usr/bin/expect /usr/lib/expect5.43 /usr/share/man/man1/expect.1.gz
    [root@abreu scripts]#
    [root@abreu scripts]#
    [root@abreu scripts]# ./gsr.sh
    ./etmreset.exp: line 11: spawn: command not found
    couldn't read file "Password:": no such file or directory
    ./etmreset.exp: line 15: send: command not found
    ./etmreset.exp: line 16: send: command not found


    Abracos


    Daniel

  11. #11
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    dlabreu,

    coloque todo conteudo do gsr.sh aqui para que a gente possa dar uma olhada

  12. #12
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    dele e do ./etmreset.exp

  13. #13

    Padrão

    ok Amigo


    Ai vai

    Esse 'e o gsr.sh

    #!/bin/bash

    ./etmreset.exp 192.168.20.111 admin



    ----------------------------------------------------------------------

    Aqui o etmreset.exp

    #! /usr/lib/expect5.43 -f
    set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
    set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
    set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)

    spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

    expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente
    # o prompt que aparece para você quando abre o telnet para o hardware
    send "$senha" # O script envia o conteúdo da variável senha
    send "R\n" # O script envia o comando R seguido de "Enter"


    -------------------------------------------------------------------------------------------------------------

    Aqui o meu resultado do whereis expect

    [root@abreu scripts]# whereis expect
    expect: /usr/bin/expect /usr/lib/expect5.43 /usr/share/man/man1/expect.1.gz




    Obrigado mesmo pela ajuda!

  14. #14
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    dlabreu,

    troque no topo do etmreset.exp

    Código :
    #! /usr/lib/expect5.43 -f

    por

    Código :
    #!/usr/bin/expect -f


    isso deve resolver os seus problemas.

  15. #15

    Padrão

    Ola amigo


    Troquei o que vc me pedio, mas continuo com erro, segue abaixo.

    [root@abreu scripts]# ./gsr.sh
    ./etmreset.exp: line 11: spawn: command not found
    couldn't read file "Password:": no such file or directory
    ./etmreset.exp: line 15: send: command not found
    ./etmreset.exp: line 16: send: command not found

    O que pode estar acontecendo?


    Abracos


    daniel

  16. #16
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    eu heim

    troca por

    #!/usr/bin/expect

    e faz um teste denovo

  17. #17

    Padrão

    Ola Amigo!


    Meu erro continua .


    [root@abreu scripts]# ./gsr.sh
    ./etmreset.exp: line 12: spawn: command not found
    couldn't read file "Password:": no such file or directory
    ./etmreset.exp: line 16: send: command not found
    ./etmreset.exp: line 17: send: command not found


    Nao existe uma outra forma de fazer esse script? e nao tenho ideia nenhuma do que esta acontecendo.


    ??????????????

    Grato


    daniel

  18. #18
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    cara poste novamente o codigo fonte dos 2 scripts para que eu possa analisar depois dessas mudancas eu tenho certeza que vc esta fazendo algo errado.

  19. #19

    Padrão

    okok!


    Ai vai os codigos!


    gsr.sh

    #!/bin/bash

    ./etmreset.exp 192.168.20.111 admin

    ------------------------------------------------------------------------------------------


    etmreset.exp


    #!/usr/bin/expect

    set timeout 20 # o script vai interromper a execução em 20 segundos se algo der errado
    set ip [lindex $argv 0] # o primeiro argumento da linha de comando vai ser associado a variável IP
    set senha [lindex $argv 1] # o segundo argumento vai ser associado a variavel senha (senha do hardware)

    spawn telnet $ip # Esse comando executa o telnet e abre a conexão com o host $ip

    expect "Password:" # O script espera pelo prompt "Password:", configure aqui exatamente
    # o prompt que aparece para você quando abre o telnet para o hardware
    send "$senha" # O script envia o conteúdo da variável senha
    send "R\n" # O script envia o comando R seguido de "Enter"




    Obrigado pela ajuda !


    Abracos

  20. #20
    Under-linux.Org Team Avatar de MarcusMaciel
    Ingresso
    Dec 2000
    Localização
    Boston
    Posts
    1.961
    Posts de Blog
    44

    Padrão

    cara eu nao faco ideia do que pode estar errado meu script ta funcionando assim mesmo a minha ultima ideia é vc dar um
    chmod +x gsr.sh
    chmod +x etmreset.exp

    fora isso pra mim ta tudo certo