Ceci est une ancienne révision du document !


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: 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 site officiel ainsi que le README.

Installation

corkscrew est disponible dans les dépôts de la plupart des distributions actuelles (Gentoo, Debian, 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
gentoo powered apache powered dokuwiki powered