sábado, 17 de janeiro de 2009

Tunel criptografado SSH para executar comandos em máquinas remotas com pipes

Aproveitando o post do Franklin: “SSH: confiança entre servidores” e também o post anterior “Usando PIPEs no Linux: mknod p, mkfifo“, vamos compartilhar com a comunidade mais uma solução interessante usando os PIPES.. mas dessa vez não será preciso criar um FIFO com mknod ou mkfifo…

Dessa vez, vamos criar uma estrutura para poder digitar um comando uma vez só em um linux, e ele será replicado para várias máquinas linux, simultaneamente…

Antes de tudo, a máquina central onde você executará o comando, deve ter confiança para executar comandos SSH em outras máquinas sem a solicitação de senha (veja o post SSH: confiança entre servidores).

Então temos que definir algumas informações e os arquivos, em forma de variável para facilitar a utilização:

#!/bin/sh
IP1=”192.168.0.10″ # Endereço IP da maquina linux1
IP2=”192.168.0.20″ # Endereço IP da maquina linux2
TUN1=”/tmp/.tun2linux1″ # Tunnel ssh para a maquina linux1
BUF1=”/tmp/.buf2linux1″ # Arquivo de buffer para maquina linux1
TUN2=”/tmp/.tun2linux2″ # Tunnel ssh para a maquina linux2
BUF2=”/tmp/.buf2linux2″ # Arquivo de buffer para linux2

Explicação:
Os arquivos nomeados como TUN serão criados em seguida em forma simples arquivo em disco, e serão interceptados pelo “tail -f” e jogar tudo que receberem via ssh para os IPs definidos…

Já os arquivos nomeados como BUF serão criados em forma de simples arquivo em disco também, e servirão de buffer mesmo, onde toda a saída padrão do comando executado remotamente será armazenada… Por exemplo se você mandar o comando “ls -la /tmp”, cada arquivo BUF definido conterá o conteúdo do diretório “/tmp” respectivo de cada máquina da nossa solução..

Após isso, podemos então iniciar a criação dos túneis:

echo -n > $TUN1
echo -n > $TUN2
tail -f $TUN1 | ssh -T root@${IP1} >> $BUF1 &
tail -f $TUN2 | ssh -T root@${IP2} >> $BUF2 &

Pronto! Agora qualquer comando que você jogar com “echo” pra cima do $TUN1, será enviado via SSH para a máquina LINUX1 que você configurou, e o resultado (output) desse comando será armazenado no $BUF1. A mesma coisa acontece para o $TUN2, $BUF2, LINUX2.. e assim sucessivamente..

Exemplo de como usar:

linha1: comando=”ls -la /tmp”
linha2: echo -n > $BUF1
linha3: echo “$comando” >> $TUN1
linha4: while [ `cat $BUF1 | wc -l` -eq 0 ]
linha5: do
linha6: sleep 0.2s
linha7: done
linha8: cat $BUF1

Comentários:
linha1: definição de qual comando você vai querer executar nas máquinas remotas.
linha2: limpa o BUFFER, caso já tenha algum output de outro comando anterior
linha3: manda o comando configurado para dentro do tunnel $TUN1, nesse momento ele viaja pelo SSH até a shell na máquina remota com output para o buffer.. isso pode demorar alguns segundos..
linha4, 5, 6 e 7: laço de repetição.. enquanto o buffer BUF1 estiver vazio, aguarda 2 milésimos de segundo..
linha8: depois que detectou dados no buffer, joga na tela o conteúdo do buffer, ou seja, o output do seu comando.

Agora deixo pra você a parte de pensar o que mais você pode criar a partir disso… e contribuir ainda mais para a evolução da comunidade Linux no mundo.

No próximo POST, devo exemplificar melhor como fazer o seu shell solicitar pra você qual comando você deseja executar, e então usar um laço de repetição para cada máquina configurada e sair executando..

Por: Hudson Murilo dos Santos

créditos:

http://cialinux.wordpress.com/2009/01/15/tunel-criptografado-ssh-para-executar-comandos-em-mquinas-remotas-com-pipes/

0 Comentários:

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial