Definir o tempo-limite da ligação SSH

Estou a tentar reduzir o tempo que a ssh está a tentar abrir uma ligação a um hospedeiro. Se eu colocar por exemplo {[[0]} leva muito tempo até que o prompt volte.

Em vez disso, li sobre o uso de ssh -o ConnectTimeout=10 www.google.com, mas mesmo isto demora muito tempo. Há alguma tentativa que eu possa modificar para diminuir o tempo de bloqueio?

 31
Author: multiholle, 2012-04-20

2 answers

O problema pode ser que a ssh esteja a tentar ligar-se a Todos Os diferentes IPs a que www.google.com se resolve. Por exemplo na minha máquina:

# ssh -v -o ConnectTimeout=1 -o ConnectionAttempts=1 www.google.com
OpenSSH_5.9p1, OpenSSL 0.9.8t 18 Jan 2012
debug1: Connecting to www.google.com [173.194.43.20] port 22.
debug1: connect to address 173.194.43.20 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.19] port 22.
debug1: connect to address 173.194.43.19 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.18] port 22.
debug1: connect to address 173.194.43.18 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.17] port 22.
debug1: connect to address 173.194.43.17 port 22: Connection timed out
debug1: Connecting to www.google.com [173.194.43.16] port 22.
debug1: connect to address 173.194.43.16 port 22: Connection timed out
ssh: connect to host www.google.com port 22: Connection timed out

Se eu o executar com um IP específico, ele retorna muito mais rápido.

EDIT : Eu cronometrei (com time) e os resultados são:

  • www.google.com -5.086 segundos
  • 173, 94, 43, 16-1, 054 segundos
 49
Author: sinelaw, 2013-01-30 19:57:42

A opção ConnectTimeout permite-lhe dizer ao seu cliente ssh quanto tempo está disposto a esperar por uma ligação antes de devolver um erro. Ao definir ConnectTimeout para 1, Você está efetivamente dizendo "tente no máximo 1 segundo e, em seguida, falhar se você ainda não se conectou".

O problema é que quando você se conecta pelo nome, a pesquisa do DNS pode levar vários segundos. Conectar por endereço IP é muito mais rápido, e pode realmente funcionar em um segundo ou menos. O que sinelaw está experimentando é que cada tentativa de se conectar pelo nome DNS está falhando em um segundo. A configuração padrão dos defers do ConnectTimeout para o tempo-limite do kernel connect do linux, que normalmente é bastante longo.

 2
Author: John Calcote, 2016-02-11 23:36:22