Como posso fazer login automaticamente em uma lista de servidores para evitar o bloqueio da conta?

3

Eu iniciei um novo contrato e preciso ter uma conta ativa em quase 200 servidores. A segurança bloqueia as contas após 30 dias de inatividade, bem como se você não fizer login dentro de 1 hora depois de desbloquear a conta.

Para impedir que tudo seja bloqueado, gostaria de criar um script que percorra a lista de servidores, efetue login com meu nome de usuário e senha e, em seguida, efetue logout.

Estamos executando o RHEL 5 na maioria das máquinas, com alguns OEL 6s também (principalmente o RHEL5).

Ir para o tópico continua me trazendo para o tópico keygen do SSH (que nós temos / usamos), mas eu quero que minha conta genérica não fique bloqueada o tempo todo nos outros servidores, no caso de problemas de rede onde eu tenho para ir fisicamente e fazer o login.

    
por Valadil 02.05.2014 / 13:56

3 respostas

4

Em vez de criar seus próprios scripts, recomendamos o uso de pssh . Ele tem recursos internos para passar a senha para ssh, paralelizar o processo, tratamento de erros e assim por diante. É uma boa roda, não há necessidade de inventar outra.

    
por 02.05.2014 / 14:19
0

Suponho que você tenha um usuário com nome de usuário como user1 em todas as 200 máquinas.

Primeiro, crie uma chave ssh pública em sua máquina (digamos, máquina 1)

ssh-keygen -t rsa

Você será perguntado por uma senha que será solicitada a digitar na primeira vez que executar qualquer comando ssh após cada login. Isso significa que, para vários comandos ssh ou scp , você só precisará inseri-lo uma vez. No entanto, você pode deixá-lo vazio para ter acesso totalmente sem senha.

Se você estiver em uma rede, todos os seus endereços IP estarão disponíveis em /etc/hosts .

Você pode obter a lista de endereços IP ou nomes de host e salvá-los em um arquivo apenas com os nomes de host.

Meu IPlistfile.txt é como abaixo.

192.168.1.11
192.168.1.12

Depois de gerar sua chave pública, copie-a (como user1 ) para cada computador da sua rede.

while read ip; do 
 ssh-copy-id -i ~/.ssh/id_rsa.pub user1@$ip 
done < IPlistfile.txt

Você terá que inserir manualmente a senha para cada IP (a menos que você use uma das soluções abaixo para esta etapa também), mas uma vez feito isso, você poderá executar o script sem usar senhas em todas as etapas. essas máquinas.

Agora, você pode ter um script para ssh em todas as máquinas e fazer logout periodicamente.

while read ip; do 
 ssh user1@$ip
 exit 
done < IPlistfile.txt

O script acima pode ser colocado em cronjob e pode ser executado periodicamente para efetuar login e logout de servidores como desejar, sem bloquear a conta do usuário.

Por favor, consulte a resposta à minha pergunta intitulada script para automatizar o scp em uma rede e ele lhe dará mais ideias.

    
por 02.05.2014 / 14:09
0

As chaves RSA seriam a melhor solução, no entanto, se você não puder usá-las, precisará fazer alguns hacks feios com expect da seguinte forma:

#!/usr/bin/expect

set timeout 60
#set maxSpawn 20

if { $argc >= 2 } { 
    set user [lindex $argv 0]
    set pass [lindex $argv 1]
    set cmd ""
    for {set i 2} {$i < $argc} {incr i 1} {
        append cmd "[lindex $argv $i] "
    }
    #puts $cmd
} else {
    exit
}

log_user 0 
spawn sh -c "$cmd"
log_user 1

expect {
    "$user:" {
        send "$pass\n"; 
        #exp_continue; 
        expect { 
            "Sorry" { exit }
            "assword:" { send "$pass\n"; exp_continue; }
            "$user: " { send "$pass\n"; exp_continue; }
            timeout { exit }
            eof { exit }
            default { exp_continue; }
        } 
    }
    "assword:" { 
        send "$pass\n"; 
        #exp_continue; 
        expect { 
            "Sorry" { exit }
            "assword:" { send "$pass\n"; exp_continue; }
            "$user: " { send "$pass\n"; exp_continue; }
            timeout { exit }
            eof { exit }
            default { exp_continue; }
        } 
    }
    "(yes/no)?" { 
        send "yes\n"; 
        exp_continue 
    }
    "\[Y/n\]\?" { 
        send "y\n"; 
        exp_continue 
    }
    eof { exit }
    timeout { exit }
    default { exp_continue; }
}

Salve-o como ssh.exp e execute como:

ssh.exp your_username your_password ssh server exit
    
por 02.05.2014 / 14:07

Tags