Executar comando via SSH em Shell Script

13. Re: Executar comando via SSH em Shell Script

Jhon Lucas Silva
s_jhon

(usa Red Hat)

Enviado em 01/11/2016 - 01:27h

amarildosertorio escreveu:

Você falou que utiliza o Nagios. Você não está tirando proveito da ferramenta. Poderia monitorar via snmp ou nrpe, definir os thresholds e configurar o contexto de notificação.


Boa noite!

Sim utilizo o Nagios, porém não explorei esta parte por não ter conhecimento, mas vou procurar saber disso, caso tenha mais alguma outra dica, se possível compartilhe por favor.

Grato!



  


14. Re: Executar comando via SSH em Shell Script

Jhon Lucas Silva
s_jhon

(usa Red Hat)

Enviado em 01/11/2016 - 01:31h

msoliver escreveu:

s_jhon escreveu:

Pessoal, consegui fazer aqui seguindo a orientação de todos que colaboraram, tive alguns problemas mas no fim conseguir criar um shell script que faz a verificação do disco em diversos servidores por conexão remota utilizando SSH e então encaminhando um e-mail caso tenha algum disco sem espaço.

Segue o código final:

#!/bin/bash

# Author: Jhon Lucas
# 21-Out-16

#Limpa o arquivo
echo '' > /root/check_disk.txt

#Set Variable
ECHO=/bin/echo
CAT=/bin/cat
WHOAMI=`/usr/bin/whoami`
SSH=/usr/bin/ssh
SEND='/scripts/sendEmail'
RM=/bin/rm
PATH=/scripts/list_servers_check.txt
GERA_LISTA_PARTICOES="df -h -P |grep -v 'Use' > /root/lista_percent.txt"
GERA_LISTA_PERCENT="cat /root/lista_percent.txt"


#Check if User is Root
if [ "${WHOAMI}" != 'root' ];
then
$echo 'Voce precisa ser root para executar este Shell Script'
exit 1
fi

#Conecta em todos servidores via ssh e cria um arquivo com percentual de disco
for FILE1 in `$CAT ${PATH}`;
do
if [ "$FILE1" == "10.62.3.47" ]; then
$SSH -p 31 root@${FILE1} ${GERA_LISTA_PARTICOES}
else
$SSH -p 16 root@${FILE1} ${GERA_LISTA_PARTICOES}
fi
done

for FILE2 in `$CAT ${PATH}`;
do
if [ "$FILE2" == "10.62.3.47" ]; then
$SSH -p 31 root@${FILE2} ${GERA_LISTA_PERCENT} > /root/temp.txt
$ECHO 'Servidor: '${FILE2} >> /root/check_disk.txt
LIST_PERCENT=/root/temp.txt
else
$SSH -p 16 root@${FILE2} ${GERA_LISTA_PERCENT} > /root/temp.txt
$ECHO 'Servidor: '${FILE2} >> /root/check_disk.txt
LIST_PERCENT=/root/temp.txt
fi

for FILE3 in `$CAT ${LIST_PERCENT} |/bin/awk '{print $5}' |/bin/sed "s/%//g"`;
do
if [ "$FILE3" -ge "95" ]; then
VAR="true"
break
else
VAR="false"
fi
done

if [ $VAR == "true" ]; then
$CAT /root/temp.txt >> /root/check_disk.txt
$ECHO "" >> /root/check_disk.txt
$RM -rf /root/temp.txt
else
$ECHO '' > /root/check_disk.txt
fi
done

ARQ=`$CAT /root/check_disk.txt`

if [ "${ARQ}" != " " ];
then
SUBJECT='Monitoramento de Servidores - Espaco em Disco'
MESSAGE='Segue em anexo relacao de servidores que estao com pouco espaco em disco, favor verificar.'
FILE='/root/check_disk.txt'
${SEND} -f "email" -t "email" -u "${SUBJECT}" -m $MESSAGE -a $FILE -s "IP servidor de E-mail" -xu desenvolvimento -xp genexus

else
$ECHO '' >> /dev/null
fi


Obrigado à todos que me orientaram.
Abraço!

=======================================================================
Boa noite s_jhon.
Estava analisando seu script, e surgiu uma dúvida . . .
O SSH do SERVER com IP "10.62.3.47" responde na porta 31
e os OUTROS na PORTA 16, é isso?

Att.:
Marcelo OLiver



Isso aí Marcelo.



15. Re: Executar comando via SSH em Shell Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2016 - 09:58h

msoliver escreveu:

s_jhon escreveu:
=======================================================================
Boa noite s_jhon.
Estava analisando seu script, e surgiu uma dúvida . . .
O SSH do SERVER com IP "10.62.3.47" responde na porta 31
e os OUTROS na PORTA 16, é isso?

Att.:
Marcelo OLiver


Isso aí Marcelo.

=======================================================================
Bom dia s_jhon.
Nesse caso, você poderia colocar as "portas" no arquivo que estão os "IPs" (list_servers_check.txt), tipo:
10.62.3.47:31
Dessa forma, evitaria o "condicional" abaixo, e otimizaria seu script...
if [ "$FILE2" == "10.62.3.47" ]; then
$SSH -p 31 root@${FILE2} ${GERA_LISTA_PERCENT} > /root/temp.txt
$ECHO 'Servidor: '${FILE2} >> /root/check_disk.txt
LIST_PERCENT=/root/temp.txt
else
$SSH -p 16 root@${FILE2} ${GERA_LISTA_PERCENT} > /root/temp.txt
$ECHO 'Servidor: '${FILE2} >> /root/check_disk.txt
LIST_PERCENT=/root/temp.txt
fi


Vou fazer e logo mais posto, ok?

att.:
Marcelo Oliver



16. Re: Executar comando via SSH em Shell Script

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/11/2016 - 14:42h

Boa tarde s_jhon.
Dei uma otimizada no seu script...
O arquivo "/scripts/list_servers_check.txt".,
deve ser no seguinte formato:
IP:PORTA
Segue:

#!/bin/bash

# Author: Jhon Lucas
# 21-Out-16

#Set Variable
SSH=/usr/bin/ssh
SEND='/scripts/sendEmail'
LIST_SRV="/scripts/list_servers_check.txt"
NR=$(awk 'END {print NR}' "$LIST_SRV" )
CRITICO="/root/check_disk.txt"
OLD_IFS="$IFS"

INIC() {
#Check if User is Root
(( $(id -u) == "0")) && CONECTA || { echo 'Voce precisa ser root para executar este Shell Script' ; exit 1 ; }
}

#Conecta em todos servidores via ssh e cria um arquivo com percentual de disco
CONECTA() {
let NL++
LINE=$(sed -n "${NL}p" $LIST_SRV)
IFS=":" read -r IP PORTA <<< "$LINE" ; IFS="$OLD_IFS"
$SSH -p ${PORTA} root@${IP} df -h -P|awk '$5~/95%/{print $1,$5}' > "$CRITICO"
if [ -s "$CRITICO" ];then
DH=$(date +"%d/%m/%Y %H:%M:%S:%3N")
sed -i "1iServidor: ${IP}\n${DH}\n\nSist. Arq.\tUso%" "$CRITICO"
SUBJECT='Monitoramento de Servidores - Espaco em Disco'
MESSAGE='Servidor:'$IP', com pouco espaco em disco. Segue anexo com detalhes. Favor verificar.'
${SEND} -f "email" -t "email" -u "${SUBJECT}" -m $MESSAGE -a $CRITICO -s "IP servidor de E-mail" -xu desenvolvimento -xp genexus
fi
sleep 1
((NL<NR)) && CONECTA || exit 0
}
INIC
###A LINHA ACIMA, FAZ PARTE DO SCRIPT###


Teste, por favor e de o retorno...

Att.:
Marcelo Oliver



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts