shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Fwd: Dificuldade com loop


From: Jonathan Lessa
Subject: Re: [shell-script] Fwd: Dificuldade com loop
Date: Sun, 18 Aug 2013 20:44:40 -0300

No "while" aparenta que o exit do sshpass está sendo aplicado no próprio
while e não no servidor em que é feito o logon, por isso que ele sai assim
que se consegue acesso no primeiro servidor.

Testei com o for e funcionou:

[root@srv1 ~]# cat test
#!/bin/bash

for SERVERS in $(cat linux_servers.txt)
do
sshpass -f /root/senha ssh -l root -o "ConnectTimeout=3" -o
StrictHostKeyChecking=no $SERVERS exit
EXIT_CODE_SSH=$?
(( $EXIT_CODE_SSH == 0 )) && echo "logon OK no servidor $SERVERS" || echo
"falha de logon no servidor $SERVERS"
done



O "problema" pode ser porque não é aberto um novo terminal para os comandos
do "while", enquanto no for é aberto um novo terminal para execução de cada
comando. Não tenho certeza disso, quem sabe os mais experientes nos
confirmem se realmente existe essa diferença no uso do while e do for




Em 18 de agosto de 2013 19:57, Jonathan Lessa <address@hidden>escreveu:

> Testei aqui e aconteceu o mesmo comigo, ainda estou tentando entender o
> que é, mas consegui fazendo da seguinte forma:
>
>
> [root@srv1 ~]# cat test
> #!/bin/bash
> sshpass -p 'jh&on_19' ssh -l root -o "ConnectTimeout=3" -o
> StrictHostKeyChecking=no $1 exit
> (( $? == 0 )) && echo "logon OK no servidor $1" || echo "falha de logon no
> servidor $1"
>
>
> [root@srv1 ~]# cat linux_servers.txt
> 192.168.0.20
> 192.168.0.2
> 192.168.0.200
> 192.168.0.10
> 192.168.0.3
> 192.168.0.200
> 192.168.0.1
>
>
> [root@srv1 ~]# cat linux_servers.txt | xargs -n1 /root/test
> ssh: connect to host 192.168.0.20 port 22: No route to host
> falha de logon no servidor 192.168.0.20
> ssh: connect to host 192.168.0.2 port 22: No route to host
> falha de logon no servidor 192.168.0.2
> logon OK no servidor 192.168.0.200
> ssh: connect to host 192.168.0.10 port 22: No route to host
> falha de logon no servidor 192.168.0.10
> ssh: connect to host 192.168.0.3 port 22: No route to host
> falha de logon no servidor 192.168.0.3
> logon OK no servidor 192.168.0.200
> ssh: connect to host 192.168.0.1 port 22: Connection refused
> falha de logon no servidor 192.168.0.1
>
>
>
>
> Perceba que ele consegue completar o teste em todos os servidores.
>
> Assim que conseguir resolver com o loop aviso.
>
>
>
>
> Em 18 de agosto de 2013 16:11, Thiago Alencar - Yahoo <
> address@hidden> escreveu:
>
>  **
>>
>>
>> Olá amigos da lista,
>>
>> Primeira vez que venho aqui buscar ajuda dos "universitários e mestres".
>> Costumo acompanhar a lista e estou no momento estudando o livro do Julio.
>>
>> Seguinte, caiu um desafio lá na empresa de testarmos o login em todos os
>> servidores para validarmos os acessos. Como são 1042 IPs resolvi partir
>> para um Script pois só com desafios do gênero pra que eu tome vergonha na
>> cara e aprendar a scriptar. Admiro muito a ajuda desta lista, a boa
>> vontade
>> de todos! Isso tem me estimulado a estudar e sair da inêrcia.
>>
>> Primeiramente consegui fazer um script para descobrir o S.O. de cada IP
>> através da TTL na resposta do Ping. Segue para críticas:
>>
>> #!/bin/bash
>>
>> while read SERVERS ; do
>> PING=$(ping -c1 -W1 $SERVERS);
>> EXIT_CODE_TTL=$?
>> if [ $EXIT_CODE_TTL -eq 1 ]
>> then
>> echo "O Servidor $SERVERS não respondeu ao PING"
>> echo "Servidor:$SERVERS;Ping:Not;SO:What" >> serverporSO.txt
>> else
>> TTL=`echo $PING |grep ttl |awk '{print $13}' | cut -d "=" -f 2`
>> if [ $TTL -ge 100 ]
>> then
>> echo "O Servidor $SERVERS é Windows!"
>> echo "Servidor:$SERVERS;Ping:OK;SO:Windows" >> serverporSO.txt
>> else
>> if [ $TTL -le 64 ]
>> then
>> echo "O Servidor $SERVERS é Linux!"
>> echo "Servidor:$SERVERS;Ping:OK;SO:Linux" >> serverporSO.txt
>> fi
>> fi
>> fi
>> done < listageral.txt
>>
>> NOSSA, COMO FOI BOM CONSEGUIR FAZER ISSO PELO MENOS! RSRS
>>
>> Só que no segundo script que travei e não consigo descobrir. Já usei o
>> debug do Bash mas mesmo assim não saí do lugar. Fiz e refiz, inverti a
>> ordem, tentei de tudo.
>>
>> O Segundo script é para logar nos servidores linux, fazer um logon (pra
>> testar a autenticação) e após isso um exit, pegando o Exit Code para
>> salvar
>> num txt como relatório. O problema é que da lista de IPs com S.O. Linux,
>> todos os 5 primeiros dão erros de autenticação, e quando chega no primeiro
>> sucesso de logon, ele termina o script e não continua.
>>
>> Segue:
>>
>> #!/bin/bash
>>
>> while read SERVERS ; do
>> sshpass -p "xxxxx" ssh -l user -o "ConnectTimeout=3" -o
>> StrictHostKeyChecking=no $SERVERS "exit"
>> EXIT_CODE_SSH=$?
>> if [ $EXIT_CODE_SSH -eq 5 ]
>> then
>> echo "Erro de autenticação no Servidor $SERVERS."
>> echo "Servidor:$SERVERS;Ping:OK;SSH:OK;Logon:Failed" >>
>> linuxservers.txt
>> else
>> if [ $EXIT_CODE_SSH -eq 255 ]
>> then
>> echo "Erro provável de conexão na porta 22 no servidor
>> $SERVERS."
>> echo "Servidor:$SERVERS;Ping:OK;SSH:Not;Logon:Not" >>
>> linuxservers.txt
>> else
>> if [ $EXIT_CODE_SSH -eq 0 ]
>> then
>> echo "Maravilha! Tá logando no servidor $SERVERS"
>> echo "Servidor:$SERVERS;Ping:OK;SSH:OK;Logon:OK" >>
>> linuxservers.txt
>> fi
>> fi
>> fi
>> echo $SERVERS
>> done < linux_servers.txt
>>
>> E alguém conheceria uma maneira de realizar o mesmo teste no windows? O
>> problema é que não rola a opção "-s" do rdesktop no windows server 2008 :(
>> Vou testar um rdesktop plus no XP que achei no google, mas aceito
>> sugestões!
>>
>> Já até imagino que deva ser muito besta e algo que não to conseguindo
>> enxergar, mas tudo bem rs!
>>
>> Thiago
>> São Paulo
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>  
>>
>
>
>
> --
> Att.:
> Jonathan Lessa
>



-- 
Att.:
Jonathan Lessa


[As partes desta mensagem que não continham texto foram removidas]



reply via email to

[Prev in Thread] Current Thread [Next in Thread]