2012-04-19 3 views
29

Sto provando a ridurre il tempo in cui ssh sta tentando di aprire una connessione a un host. Se metto ad esempio ssh www.google.com ci vuole molto tempo prima che il prompt ritorni.Imposta timeout connessione SSH

Ho letto sull'uso di ssh -o ConnectTimeout=10 www.google.com, ma anche questo richiede molto tempo. C'è forse un numero di tentativi che posso modificare per ridurre il tempo di blocco?

+5

da ssh docs: "Utilizzare questo per specificare il timeout (in secondi) utilizzato durante la connessione al server SSH, anziché utilizzare il timeout TCP di sistema predefinito. Questo valore viene utilizzato solo quando la destinazione è inattiva o realmente irraggiungibile, non quando rifiuta la connessione. " – Adi

risposta

44

Il problema potrebbe essere che ssh sta tentando di connettersi a tutti i i diversi IP a cui corrisponde lo www.google.com. Ad esempio sulla mia macchina:

# 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 lo eseguo con un IP specifico, restituisce molto più veloce.

EDIT: ho cronometrato (con time) ed i risultati sono:

  • www.google.com - 5.086 secondi
  • 173.94.43.16 - 1,054 secondi
2

L'opzione ConnectTimeout consente di comunicare al client ssh quanto tempo si desidera attendere una connessione prima di restituire un errore. Impostando ConnectTimeout su 1, stai effettivamente dicendo "prova per almeno 1 secondo e poi fallisci se non ti sei ancora connesso".

Il problema è che quando ci si connette per nome, la ricerca DNS può richiedere diversi secondi. La connessione tramite l'indirizzo IP è molto più veloce e può effettivamente funzionare in un secondo o meno. Ciò che sta vivendo il sinelaw è che ogni tentativo di connettersi tramite il nome DNS non si verifica entro un secondo. L'impostazione predefinita di ConnectTimeout defers al timeout di connessione del kernel linux, che in genere è piuttosto lunga.

+4

È piuttosto insolito che una ricerca DNS richieda diversi secondi. –