====== Utiliser SSH à travers un proxy ====== ===== Pourquoi ? ===== Il arrive parfois que sur certains réseaux (notamment en entreprise), tous les services vers l'extérieur soient bloqués. Ceci est souvent dû au fait que toute connexion doit se faire à travers un proxy sinon elle se retrouve bloquée. On verra par la suite que certaines règles de firewalling peuvent poser problème. Une solution (assez peu pratique) sera proposée. ===== Comment ? ===== Il s'agit sans doute de la question la plus intéressante, à savoir, comment faire pour outrepasser le proxy pour faire du SSH tranquillement. Une solution: **[[http://www.agroman.net/corkscrew/|corkscrew]]** **corkscrew** (tire-bouchon en anglais) est donc un petit outil permettant de tunneling SSH à travers des proxies HTTP. Parmi les proxies HTTP testés, on retrouve : * Gauntlet * CacheFlow * JunkBuster * Squid * mod_proxy d'Apache J'ai seulement eu l'occasion de le tester à travers Squid et ça fonctionne très bien. Pour plus d'informations, il est possible de consulter le [[http://www.agroman.net/corkscrew/|site officiel]] ainsi que le [[http://www.agroman.net/corkscrew/README|README]]. ===== Installation ===== corkscrew est disponible dans les dépôts de la plupart des distributions actuelles ([[http://packages.gentoo.org/package/net-misc/corkscrew|Gentoo]], [[http://packages.debian.org/stable/corkscrew|Debian]], [[http://packages.ubuntu.com/gutsy/net/corkscrew|Ubuntu]], ...). Si toutefois corkscrew n'était pas présent, il suffit alors de le compiler à partir des sources. corkscrew ne demande aucun dépendance particulière si ce n'est les outils de compilation habituels. wget http://www.agroman.net/corkscrew/corkscrew-2.0.tar.gz tar xvzf corkscrew-2.0.tar.gz cd corkscrew-2.0/ ./configure make make install Si vous ne disposez pas de l'accès //root// pour faire le **make install**, copiez simplement le fichier **corkscrew** généré suite au **make** dans le répertoire de votre choix. ===== Configuration ===== L'avantage de corkscrew est qu'il demande très peu de configuration, il est donc très simple à utiliser.\\ Le seul fichier à configurer est le fichier de configuration de ssh, **~/.ssh/config**. Supposons que je veuille accéder, via SSH, à une machine ayant comme adresse IP **123.123.123.123**. Le serveur SSH utilise le port par défaut, à savoir le port **22**. Je connais également les informations concernant le proxy de l'entreprise. Il s'agit de la machine ayant comme IP **234.234.234.234** et le service proxy écoute sur le port **3128**.\\ Je dispose désormais de toutes les informations nécessaires pour utiliser corkscrew. Il ne reste plus qu'à éditer le fichier **~/.ssh/config** en rajoutant : Hostname 123.123.123.123 Port 22 ProxyCommand /usr/bin/corkscrew 234.234.234.234 3128 %h %p Selon où corkscrew est installé, remplacer **/usr/bin/corkscrew** par le chemin vers l'exécutable. Maintenant, il ne reste plus qu'à tester. ssh 123.123.123.123 ===== J'ai tout suivi à la lettre, mais cela ne fonctionne pas ===== ==== ssh_exchange_identification: Connection closed by remote host ==== Si le proxy/firewall est très exigeant, il est fort probable d'avoir cette erreur. ssh 123.123.123.123 Proxy could not open connnection to 123.123.123.123: Forbidden ssh_exchange_identification: Connection closed by remote host Le seul moyen d'empêcher cette erreur est de changer le port du serveur SSH sur la machine distante (123.123.123.123). Il arrive en effet que le port soit bloqué par le firewall de l'entreprise. Parmi les ports communément ouverts, on peut citer le 80, 443, 21. Cela implique évidemment la modification du champ //Port// dans le fichier **~/.ssh/config**. ==== Le proxy requiert une authentification ==== Si pour accéder au proxy il est nécessaire de fournir un identifiant et un mot de passe, il est possible de gérer ce cas avec corkscrew. Pour cela, il faut créer un fichier qui contiendra les informations de connexion. Par exemple **~/.ssh/auth**. Il suffit simplement de mettre l'identifiant et le mot de passe séparés par «**:**» sur la première ligne. MonIdentifiant:MonMotDePasse Il faut ensuite modifier la ligne //ProxyCommand// du fichier **~/.ssh/config** : ProxyCommand /usr/bin/corkscrew 234.234.234.234 3128 %h %p ~/.ssh/auth {{keywords>ssh proxy firewall travail boulot corkscrew over http}}