Usando expect pra acessar um host no meio do caminho

Categoria: Scripts Publicado: Sexta, 11 Junho 2021 Escrito por Helio Loureiro Imprimir

Eu estou no momento trabalhando num troubleshooting de uma rede 5G.  Qual a novidade?  Seria o 5G?  Bom... não.  A diferença é que pra acessar o ambiente cloud eu preciso fazer login numa máquina e depois fazer login em outra máquina.

Nada muito glamouroso, mas não é algo que eu possa escolher não fazer.  Então a forma pra ajudar a ter isso feito da forma mais rápida possível foi através dos uso de expect.

Primeiramente uma visão da rede:

 

Um diagrama feito no libreoffice draw.  Também nada glamouroso, mas deve dar conta do recado.  Eu rodo o script, que pede somente minha senha de rede uma vez que é o mesmo usuário no server-gw1.  E conecta via ssh.  No server-gw2 é o mesmo usuário e senha, o que facilita as coisa.  Dali pra rede k8s não tem mais nada porque eu acesso com um kube.conf e comand kubectl.

O script é esse aqui:


#! /usr/bin/expect

stty -echo
send_user -- "Entre a senha: "
expect_user -re "(.*)\n"
send_user "\n"
stty echo
set PASS $expect_out(1,string)


spawn ssh server-gw1

while {1} {
        expect {
                "ssword:" { send "$PASS\n" }
                "(yes/no)?" { send "yes\n" }
                "\$ " {break}
        }
}

send "ssh server-gw2; exit\n"
while {1} {
        expect {
                "ssword:" { send "$PASS\n" }
                "(yes/no)?" { send "yes\n" }
                "\$ " {break}
        }
}
interact

Note que é possível trocar pra receber o username como input ou como argumento do script.  Na chamada pro segundo servidor existe um 'send "ssh server-gw2; exit\n"'.  O motivo disso é pra quando eu digitar "exit" do servidor server-gw2 não precisar digitar novamente no server-gw1.  Então ele faz o ssh pro server-gw2 e o próximo comando esperando já é um exit.

Espero que ajude e happy coding!

Acessos: 861
Mastodon Mastodon
We use cookies

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.