George Robinson george.robinson.br@gmail.com [shell-script]
2017-07-05 21:49:34 UTC
Olá pessoal,
Estou tentando criar um formato para que eu consiga pegar uma lista de
hosts, exemplo:
host1
host2
host3
....
host(n)
e para cada um desses, eu consiga testar uma lista de possÃveis senhas.
Até o momento, eu consegui fazer uma comparação 1 para 1, ou seja, primeiro
host com a primeira senha, e ele retorna se está correto ou não. Usei os
seguintes scripts:
hosts_dev.txt:
host1
host2
host3
pws_dev.txt:
senha1
senha2
senha3
Utilizei um arquivo que testa as senhas pwtest.exp:
#!/usr/bin/expect -f
################################################################################################################
## Script para testar a conexao com servidor e checar se a senha do usuario
root esta correta
## Utiliza o comando expect para fazer o acesso e inserir a senha ##
## Referencia:
http://www.pantz.org/software/expect/expect_examples_and_tips.html ##
## Nix - 23/08/2013 ##
################################################################################################################
######### Variaveis #########
set timeout 5
set HOST [lindex $argv 0]
set PASS [lindex $argv 1]
log_user 0
## Inicializa a conexao SSH
spawn ssh -q -o StrictHostKeyChecking=no root@$HOST
## Mensagem de erro a ser exibida caso ocorra timeout na conexao SSH
(prompt que solicita a senha nao eh exibido!)
## *assword eh para corresponder "Password" ou "password" :)
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $HOST\n"; exit 1 }
"*assword"
}
## Caso o prompt que solicita a senha seja exibido, a mesma eh enviada
send "$PASS\r"
## Mensagem a ser exibida caso a senha esteja incorreta
## *\# indica o prompt do usuario caso, o root
expect {
timeout { send_user "$HOST - Login failed. Password incorrect.\n"; exit 1}
"*\# "
}
## Caso a senha esteja correta, eh exibida a mensagem abaixo:
send_user "$HOST - Password is correct\n"
## Desconecta do servidor - o mesmo que Control+D:
send "exit\r"
## Encerra programa
close
----------------------------------------------------------------------------------------------------------
E por fim, o arquivo que valida tudo, valida_pw.sh:
#!/bin/bash
################################################################################################################
## Script para validar senhas em massa a partir de um arquivo de servidores
e outro com as respectivas senhas
## Executa o arquivo pwtest.exp
## Nix - 23/08/2013
################################################################################################################
######## Variaveis ########
# Lista de servidores
HOSTS=$(cat /root/temp/hosts_dev.txt)
# Arquivo de senhas
PWDS=$(cat /root/temp/pws_dev.txt)
####### Contador para ler o arquivo de senhas linha a linha #######
i=0
for pd in $PWDS; do
pws[$i]=$pd;
i=`expr $i + 1`
done
####### Contador para ler o arquivo de hosts linha a linha e testar a senha
usando o script expect #######
### Eh passado como parametro o servidor ($j) e a senha do mesmo ($pws)
i=0
for j in $HOSTS; do
/root/temp/pwtest.exp $j ${pws[$i]}
i=`expr $i + 1`
done
Eu tentei fazer um for para os arquivos de host e um while para o arquivo
de senha, fazendo com que ele teste todas as possÃveis senhas para cada
host a ser testado, porém o loop fica infinito. Pensei em algo como (apenas
senhas):
while read $PWDS ; do
pws[$i]=$pd;
i=`expr $i + 1`
done
Mas não tive sucesso até o momento.
George Robinson
Analista de Suporte
Tel: +55 (21) 97449-8138
Estou tentando criar um formato para que eu consiga pegar uma lista de
hosts, exemplo:
host1
host2
host3
....
host(n)
e para cada um desses, eu consiga testar uma lista de possÃveis senhas.
Até o momento, eu consegui fazer uma comparação 1 para 1, ou seja, primeiro
host com a primeira senha, e ele retorna se está correto ou não. Usei os
seguintes scripts:
hosts_dev.txt:
host1
host2
host3
pws_dev.txt:
senha1
senha2
senha3
Utilizei um arquivo que testa as senhas pwtest.exp:
#!/usr/bin/expect -f
################################################################################################################
## Script para testar a conexao com servidor e checar se a senha do usuario
root esta correta
## Utiliza o comando expect para fazer o acesso e inserir a senha ##
## Referencia:
http://www.pantz.org/software/expect/expect_examples_and_tips.html ##
## Nix - 23/08/2013 ##
################################################################################################################
######### Variaveis #########
set timeout 5
set HOST [lindex $argv 0]
set PASS [lindex $argv 1]
log_user 0
## Inicializa a conexao SSH
spawn ssh -q -o StrictHostKeyChecking=no root@$HOST
## Mensagem de erro a ser exibida caso ocorra timeout na conexao SSH
(prompt que solicita a senha nao eh exibido!)
## *assword eh para corresponder "Password" ou "password" :)
expect {
timeout { send_user "\nFailed to get password prompt\n"; exit 1 }
eof { send_user "\nSSH failure for $HOST\n"; exit 1 }
"*assword"
}
## Caso o prompt que solicita a senha seja exibido, a mesma eh enviada
send "$PASS\r"
## Mensagem a ser exibida caso a senha esteja incorreta
## *\# indica o prompt do usuario caso, o root
expect {
timeout { send_user "$HOST - Login failed. Password incorrect.\n"; exit 1}
"*\# "
}
## Caso a senha esteja correta, eh exibida a mensagem abaixo:
send_user "$HOST - Password is correct\n"
## Desconecta do servidor - o mesmo que Control+D:
send "exit\r"
## Encerra programa
close
----------------------------------------------------------------------------------------------------------
E por fim, o arquivo que valida tudo, valida_pw.sh:
#!/bin/bash
################################################################################################################
## Script para validar senhas em massa a partir de um arquivo de servidores
e outro com as respectivas senhas
## Executa o arquivo pwtest.exp
## Nix - 23/08/2013
################################################################################################################
######## Variaveis ########
# Lista de servidores
HOSTS=$(cat /root/temp/hosts_dev.txt)
# Arquivo de senhas
PWDS=$(cat /root/temp/pws_dev.txt)
####### Contador para ler o arquivo de senhas linha a linha #######
i=0
for pd in $PWDS; do
pws[$i]=$pd;
i=`expr $i + 1`
done
####### Contador para ler o arquivo de hosts linha a linha e testar a senha
usando o script expect #######
### Eh passado como parametro o servidor ($j) e a senha do mesmo ($pws)
i=0
for j in $HOSTS; do
/root/temp/pwtest.exp $j ${pws[$i]}
i=`expr $i + 1`
done
Eu tentei fazer um for para os arquivos de host e um while para o arquivo
de senha, fazendo com que ele teste todas as possÃveis senhas para cada
host a ser testado, porém o loop fica infinito. Pensei em algo como (apenas
senhas):
while read $PWDS ; do
pws[$i]=$pd;
i=`expr $i + 1`
done
Mas não tive sucesso até o momento.
George Robinson
Analista de Suporte
Tel: +55 (21) 97449-8138