Em um script de shell, execute ações diferentes dependendo do arquivo em outro servidor (acessível pela Web)

1

Eu tenho tido problemas com firewalls ultimamente em alguns servidores diferentes. E estou querendo criar um script que será executado uma vez a cada hora, verificar um arquivo em um servidor externo e executar o conjunto de regras de firewall relevante. Como no momento em que ALGUMA COISA acontece com o firewall, e eu recebo meu ssh / etc bloqueado, tenho que agendar uma visita no local que é ridiculamente cara. Então, este será efetivamente um sistema à prova de falhas. Se algo der errado, eu posso usar outro servidor para iniciar uma mudança no servidor "quebrado" e recuperá-lo para poder ser gerenciado remotamente. Bit haxy eu sei, mas no meu nível atual de administração Linux deve funcionar bem.

Eu nunca fiz realmente bash / sh scripting antes, mas estou acostumado a bater. Então, o que eu estou precisando de ajuda da comunidade é transformar este código psudo em algo que pode funcionar:

$PATH = "/usr/firewall-scripts/temp/";
cd $PATH;
wget https://example.com/firewall/config/failsafe;
$FAILSAFE = readfile("$PATH/failtsafe");#This <--- im sure doesn't exist. 
if($FAILSAFE == "1") {
    /usr/firewall-scripts/failsafe.fw
}
else if ($FAILSAFE == "2")  {
    /usr/firewall-scripts/failsafe2.fw
}
else if ($FAILSAFE == "0")  {
    /usr/firewall-scripts/normal.fw
}
else if ($FAILSAFE == "-1")  {
    /usr/firewall-scripts/extra-secure.fw
}

O arquivo remoto teria apenas os números listados 1,2,0 ou -1 (ou algo semelhante a essas linhas.

É apenas uma árvore / switch condicional para executar arquivos diferentes.

Obrigado antecipadamente!

Nota: Usando uma mistura de Mandrivia 2010.R2 / Ubuntu 10.04 / ClearOS, todos têm sh shy e bash, caso isso importe. Que não deveria.

EDIT: Esta é uma abordagem hacky e provavelmente há maneiras muito melhores (seguras) de fazer isso, mas isso é muito leve e simples.

    
por Mattisdada 05.05.2012 / 10:43

3 respostas

1

Você pode usar o seguinte script:

#!/bin/bash

failsafe='w3m -dump_source http://example.com/firewall/config/failsafe'
if [ "$failsafe" -eq "1" ] ; then
    /usr/firewall-scripts/failsafe.fw
elif [ "$failsafe" -eq "2" ] ; then
    /usr/firewall-scripts/failsafe2.fw
elif [ "$failsafe" -eq "0" ] ; then
    /usr/firewall-scripts/normal.fw
elif [ "$failsafe" -eq "-1" ] ; then
    /usr/firewall-scripts/extra-secure.fw
fi

Você precisa garantir que a página retorne um dos valores esperados para obter resultados corretos.

O texto acima é a resposta para sua pergunta sobre shell script, mas eu acho que será uma boa idéia tentar usar uma solução de gerenciamento de configuração como o puppet . O agente de marionetes pode ser executado para extrair a configuração de um mestre de marionetes periodicamente. Então, quando você terminar com a configuração de fantoches, você pode simplesmente soltar outro arquivo de regras de firewall e esperar que algum tempo seja executado pelo agente fantoche na máquina remota.

    
por 05.05.2012 / 10:53
2

Se você usar

FAILSAFE=$(wget -O - http://example.com/firewall/config/failsafe) 

então o conteúdo do arquivo remoto será salvo na variável $ FAILSAFE.

Você pode usar $ FAILSAFE nas suas comparações, por exemplo

#!/bin/bash

FAILSAFE=$(wget -O - http://example.com/firewall/config/failsafe 2> /dev/null)

if [ "$FAILSAFE" -eq "1" ]
then
    echo "FAILSAFE = $FAILSAFE"
elif [ "$FAILSAFE" -eq "2" ]
then
    echo "FAILSAFE = $FAILSAFE"
elif [ "$FAILSAFE" -eq "-1" ]
then
    echo "FAILSAFE = $FAILSAFE"
fi
    
por 05.05.2012 / 11:01
1
#!/bin/bash 
# (or whatever the path to bash is, find out from 'which bash'

STATE=$(wget -O - http://example.com/firewall/config/failsafe)

case $STATE in
-1)
  /usr/firewall-scripts/extra-secure.fw
  ;;
0)
  /usr/firewall-scripts/normal.fw
  ;;

1)
  /usr/firewall-scripts/failsafe.fw
  ;;
2)
  /usr/firewall-scripts/failsafe2.fw
  ;;
*)
  echo "unexpected failsafe state"
  exit 1
  ;;
esac

exit 0
    
por 05.05.2012 / 10:55