Diminuir o tempo de espera do SSH ao tentar acessar o servidor inacessível

1

Eu escrevi um script que desligou todos os servidores em nosso ambiente. Mas se algum servidor não puder ser acessado para começar ou se já estiver inativo, meu script será interrompido e nada acontecerá. Como posso fazer isso avançar se algum servidor estiver inacessível?

#!/bin/bash
#script for Shutting down all VM & BM.
Region=$1
user=$2
region_file_path="/region/$Region.txt"
host='cat $region_file_path'
key_path="/root/.ssh/id_rsa_adminpod"
for i in $host
do
#       echo "Shutting down Host in $Region with ip addrss $i"
        ssh -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null
        if [ $? -ne  0 ]; then
           echo "$i is shutdown!"
        else
           echo "There is some issue, try again"
           exit 1
        fi
done
    
por Mohd 26.09.2017 / 13:36

3 respostas

5

A solução mais simples é definir o tempo limite da conexão em um período de tempo razoável.

ssh -o ConnectTimeout=10 -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null

10 segundos devem ser suficientes.

Você também pode usar algumas outras ferramentas para automatizar tarefas, como Ansible.

    
por 26.09.2017 / 13:51
1

A solução usando o Ansible está seguindo.

0) Certifique-se de ter ativado o acesso sem senha do SSH entre o nó de gerenciamento e os nós a serem desligados.

1) prepare um arquivo de inventário simples com seus nós, que deve ser encerrado. Existe um conteúdo de exemplo:

[local]
localhost ansible_connection=local

[nodes]
192.168.1.30
192.168.1.40

2) Execute o módulo de shell ansible com o seu arquivo de inventário especificado como parâmetro e comando de desligamento:

ansible -i /tmp/hosts -m shell -a "/usr/sbin/shutdown +1" nodes

O desligamento tem um atraso de 1 minuto especificado, então a conexão não é eliminada imediatamente. Mas talvez não seja necessário.

Este é apenas um exemplo, você pode usar qualquer outro comando que queira executar em paralelo em vários nós.

    
por 26.09.2017 / 14:32
0

Se você tiver uma dependência de 'not responding', pode prosseguir sem exit 1 , mais algumas vezes para tentar novamente a ssh connection:

for i in $host
do
        counter=0
        while [ $counter -ne 3 ]; do
        #       echo "Shutting down Host in $Region with ip addrss $i"
                ssh -o ConnectTimeout=10 -i $key_path -p 2222 $user@$i "sudo init 0" &> /dev/null
                if [ $? -ne  0 ]; then
                   echo "$i is shutdown!"
                   counter=3
                else
                   echo "There is some issue, try again"
                   counter=$(($counter+1))
                fi
        done
done
    
por 26.09.2017 / 14:28