“raiz ssh @ servidor” trava para sempre

3

Às vezes, meu cliente ssh levará uma eternidade para fazer login.

Isso acontece quando o servidor não está respondendo (sobrecarregado, morto processado, ...). Meus scripts automatizados falharão porque o processo ssh nunca será encerrado.

Existe um valor de configuração ssh para definir um tempo limite para falhar se o ssh não puder fazer o login após um número predefinido de segundos?

Eu sei que existem botões no lado do servidor, mas eu tenho que configurar isso no lado do cliente, pois o processo sshd não está respondendo ou respondendo incorretamente.

Obrigado!

    
por Thibaut 31.01.2011 / 16:18

3 respostas

6

Eu já vi casos em que até mesmo configurar o ConnectTimeout não funciona. Isso pode ser particularmente irritante ao usar conexões ssh automatizadas para um grande número de servidores. Minha solução é usar um wrapper no lado do cliente que mata o processo ssh se ele não se conectar e retornar com rapidez suficiente. Algo parecido com isto (em perl):

$SshCmd = "ssh server.example.com uname -a";
$TimeOut = 120;
eval {
  local $SIG{ALRM} =
    sub {
      # ignore SIGHUP here so the kill only affects children.
      local $SIG{HUP} = 'IGNORE';
      kill 1,(-$$);
      print STDERR "ssh terminated, max run time of $TimeOut seconds exceeded.\n";
    };
  alarm $TimeOut;
  system ($SshCmd) || die "failed to run $SshCmd: $!";
  alarm 0;
};
$SIG{HUP} = 'DEFAULT';

Isso define um alarme de $TimeOut segundos e mata o filho (o comando ssh) se o alarme for excedido.

    
por 31.01.2011 / 17:28
5

Eu tive o mesmo problema e usei o "timeout" do Linux para matar uma sessão scp pendente.

timeout -s 9 1h command command_arguments

Enviará um kill -9 se o comando demorar mais de uma hora.

FYI a opção ConnectTimeout não funcionou para mim.

    
por 18.09.2015 / 13:58
3

Defina 'ConnectTimeout' em .ssh / config se usar ssh (do OpenSSH).

ConnectTimeout

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

Tente definir 'UseDNS no' em sshd_config.

    
por 31.01.2011 / 16:21