Como determinar qual dos vários computadores está configurado como primário

1

Temos um sistema antigo no qual, de um conjunto de computadores, exatamente um é configurado como a máquina "ativa" e o restante são fail-overs. Costumávamos usar ping para determinar qual era qual, no entanto, as atualizações de segurança agora tornam o ping inutilizável.

Eu descobri que ssh ainda está disponível e eu posso fazer essencialmente a mesma coisa usando ssh, no entanto, eu não vejo que o ssh tenha a mesma opção de timeout que o ping (usamos um tempo de 1 segundo que era mais que adequado em nosso ambiente). Eu mudei o script para usar o uso ssh (running uname) e o processo vai funcionar, exceto que eu não tenho a opção timeout, quando o script atinge a máquina que foi reconfigurada, o ssh trava há muito tempo.

Existe alguma maneira de definir um tempo curto para que o ssh se conecte ou encontre outra maneira de eliminá-lo após 1-2 segundos? É claro que, se houver outra maneira de ver rapidamente se alguma máquina responder a um nome de host, ou se nenhuma máquina responder a um nome de host, também adoraria saber disso.

Obrigado

    
por Jim 30.01.2018 / 21:18

1 resposta

2

Sim, você pode usar a opção ConnectTimeout . De man ssh_config :

ConnectTimeout: Specifies the timeout (in seconds) used when connecting to the SSH server, instead of using the default system TCP timeout. This value is used only when the target is down or really unreachable, not when it refuses the connection.

Portanto, por um tempo limite de 5 segundos:

ssh -o ConnectTimeout=5 host true

Observe que isso não resolverá o caso de você se conectar rapidamente, mas o comando real em execução é lento, seja na máquina de conexão ou na máquina à qual você está se conectando. Você pode querer lidar com esse caso usando ambos ConnectTimeout e o binário timeout do GNU coreutils com um tempo limite maior como backup.

Por exemplo, isso limitará as conexões que levam mais de 5 segundos e também terminará se algo em toda a operação levar mais de 7 segundos (enviando SIGTERM ). 3 segundos depois disso, se ssh ainda não tiver saído, enviaremos SIGKILL :

timeout 7 -k 3 ssh -o ConnectTimeout=5 host true

Se você também quer usar timeout ou não, depende do que você deseja alcançar, mas pelo menos permitirá que você falhe rápido.

    
por 30.01.2018 / 21:22

Tags