Guide SSH

2014-09-25

Ce document est à l'oridine une série d'articles publiés entre le 28 juin 2011 et le 18 juin 2012.

Ce guide ne traite que les cas les plus simples et les plus fréquents. Pour d'autres techniques, consultez cet article (en).

Gestion des clés

Principe

Une méthode d'authentification alternative au mot de passe est l'utilisation d'une clé SSH. Une clé SSH, ou clé RSA, identifie un client et consiste en deux fichiers : la partie publique (.pub) et la partie privée. La première est envoyée au serveur SSH pour lui indiquer quel clé SSH autoriser sur quel compte ; la deuxième reste sur l'ordinateur du client.

Créer une clé SSH

Pour générer ces deux fichiers, utiliser la commande (avec les choix par défaut) :

$ ssh-keygen

Par défaut, la partie publique est id_rsa.pub et la partie privée id_rsa, tous deux dans le répertoire .ssh.

Autoriser un client sur un serveur

Pour autoriser le client utilisant id_rsa sur le serveur, les informations de id_rsa.pub doivent être envoyée au serveur. Le plus simple, depuis le client :

$ ssh-copy-id user@host
Password:

À la connexion suivante, aucun mot de passe ne devrait être demandé.

Méthode alternative

Il est aussi possible d'ajouter le contenu de id_rsa.pub (une ligne) à .ssh/authorized_hosts (créer s'il n'existe pas) sur l'hôte. Cette méthode est utile pour autoriser un utilisateur par mail, formulaire Web, ou autre.

Abbréviations

Alias

Ajouter les lignes suivantes à .ssh/config :

Host ex
    Hostname ssh.example.org
    Port     22
    User     dupond

permet de taper

$ ssh ex

au lieu de

$ ssh -P22 dupond@ssh.example.org

Chaînage

Pour accéder à des machines en SSH par le biais d'une connexion SSH, ajouter à .ssh/config :

Host *.proxy
    Port 22
    User dupond
    ProxyCommand ssh dupont@ssh.example.org "tcpconnect `basename %h .proxy` %p"

Cette méthode est utile quand seul le serveur SSH est visible depuis l'extérieur. Pour accéder à l'ordinateur mymachine sur le réseau local, il suffit alors de taper :

$ ssh mymachine.proxy

Note : "dupond" est l'utilisateur sur la machine finale, "dupont" l'utilisateur sur le proxy (généralement le même nom d'utilisateur) ; pour remplacer le suffixe ".proxy", il faut penser à le modifier dans la commande basename dans la dernière ligne

Redirection de ports

SSH permet de rediriger les données arrivant sur un port de trois manières différentes :

Redirection arbitraire (dynamic)

Pour créer un serveur SOCKS sur le port bindport A transmettant les connexion (arrivant sur A), à travers la connexion ssh, vers B :

$ ssh -D bindport B

Redirection locale (local)

Les paquets arrivant sur bindport de A sont transmis à B sur hostport :

$ ssh -L bindport::hostport B

Redirection distante (rremote)

Les paquets arrivant sur bindport de B sont transmis à A sur hostport :

$ ssh -R bindport::hostport B

Cas spécifiques

DNS sous Firefox

Pour que Firefox effectue la résolution DNS à travers le proxy SOCKS, il faut changer une option dans about:config.

network.proxy.socks_remote_dns = true

Connexion X distante

Dans un terminal, lancer le serveur X localement :

X :10.0

Dans un autre, lancer le gestionnaire de session à distance et l'afficher sur l'instance locale de X.

DISPLAY=:10.0 ssh -Y user@host xfce4-session