web-dev-qa-db-fra.com

Définir le délai d'expiration de la connexion SSH

J'essaie de réduire le temps que ssh essaie d'ouvrir une connexion à un hôte. Si je mets par exemple ssh www.google.com il faut très longtemps pour que l'invite revienne.

J'ai lu comment utiliser ssh -o ConnectTimeout=10 www.google.com à la place, mais même cela prend très longtemps. Y a-t-il peut-être un certain nombre de tentatives que je peux modifier pour diminuer le temps de blocage?

36
multiholle

Le problème peut être que ssh essaie de se connecter à tous les différentes adresses IP qui www.google.com se résout en. Par exemple sur ma machine:

# 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

Si je l'exécute avec une adresse IP spécifique, il revient beaucoup plus rapidement.

MODIFIER : je l'ai chronométré (avec time) et les résultats sont:

  • www.google.com - 5,086 secondes
  • 173.94.43.16 - 1.054 secondes
55
sinelaw

L'option ConnectTimeout vous permet d'indiquer à votre client ssh combien de temps vous êtes prêt à attendre une connexion avant de renvoyer une erreur. En définissant ConnectTimeout sur 1, vous dites en fait "essayez pendant au plus 1 seconde, puis échouez si vous ne vous êtes pas encore connecté".

Le problème est que lorsque vous vous connectez par nom, la recherche DNS peut prendre plusieurs secondes. La connexion par adresse IP est beaucoup plus rapide et peut réellement fonctionner en une seconde ou moins. Ce que sinelaw connaît, c'est que chaque tentative de connexion par nom DNS échoue en une seconde. Le paramètre par défaut de ConnectTimeout diffère du délai de connexion du noyau Linux, qui est généralement assez long.

4
John Calcote