SSH


De même que le fichier .rhosts permet de se logguer entre deux machines sans avoir à donner de mot de passe, en disant à l'une d'entre-elles « accepte toutes les connections venant de tel utilisateur sur telle machine », de même, ssh permet de se logguer entre deux machines entre lesquelles le telnet est interdit, en disant à l'une d'entre-elles « accepte toutes les connections venant de tel utilisateur, sur telle machine (en fait, non : le nom de machine n'a aucune importance --- je peux me logguer depuis chez moi, au travers d'un modem), s'il donne le mot de passe suivant ».

1. Choisir un mot de passe par machine.

Il n'y a (visiblement) pas de restrictions, comme avec skey. Je suggère néanmoins de prendre des mots de passe de quelques dizaines de caractères au moins. Dans les exemples suivants, nous prendrons comme mot de passe « RIEMANN » sur la machine riemann et « PIANO » sur la machine piano --- ce sont bien sûr de très mauvais mots de passe.

2. Créer les clés.

      riemann% ssh-keygen
      password: RIEMANN
Un répertoire ~/.ssh a été créé. Il contient la clé privée (à ne pas divulguer) et la clé publique (que l'on peut transmettre)

3. Autoriser l'accès (pour l'utilisateur)

Sur l'autre machine, il faut créer un répertoire ~/.ssh et mettre la clé publique
      riemann:~/.ssh/identity.pub 
dans le fichier
      piano:~/.ssh/authorized_keys
On peut le faire par ftp (si ce n'est pas interdit, ou si on a compris comment fonctionne skey) ou en envoyant un courrier électronique à l'Ingénieur Système.

[Question : est-il nécessaire de créer soi-même le fichier piano:~/.ssh/known_hosts ?]

4. Vérifier que cela fonctionne.

      riemann% slogin -v piano.dptmaths.ens-cachan.fr
      ...
      Host key not found from the list of known hosts.
      Are you sure you want to continue connecting (yes/no)? yes
      password: RIEMANN
On remarquera que l'on donne le mot de passe de la machine dont on vient, pas celui de la machine sur laquelle on se loggue ; c'est en cela que c'est proche du ~/.rhosts.

On peut utiliser des clients X11 de manière transparente.

5. C'est fini

Pour bien faire les choses, on peut maintenant procéder de même sur la machine distante. Cela ne pose pas de problème de sécurité, car les communications sont cryptées.
      piano% ssh-keygen
      password: PIANO
On peut maintenant rajouter le contenu de
      piano:~/.ssh/identity.pub
dans
      riemann:~/.ssh/authorized_keys
Par ailleurs, dans le fichier ~/.ssh/authorized_keys, on peut aussi mettre la clé publique de la machine sur laquelle le fichier se trouve : cela peut servir à vérifier que l'on a bien compris comment cela fonctionne, en se relogguant sur la même machine ; c'est aussi utile si le répertoire des monté par NFS sur d'autres machines (gauss, borel).

6. Transfert de fichiers

Cela fonctionne exactement comme la commande rcp. Si on ne précise pas de répertoire, c'est le répertoire racine.
      riemann% scp toto piano.dptmaths.ens-cachan.fr:

      riemann% scp toto piano.dptmaths.ens-cachan.fr:~/

      riemann% scp toto piano.dptmaths.ens-cachan.fr:~/tmp/tutu

      riemann% scp piano.dptmaths.ens-cachan.fr:toto toto
    

7. Pour ne plus avoir à taper son mot de passe sans cesse

On peut lancer la commande ssh-agent, qui va gérer une liste de mots de passes (généralement, un seul) pour tous ses processus fils. On pre,dra garde que cette commande attend un argument : le shell à lancer. Sinon, elle ne fait absolument rien.
      borel1% ssh-agent zsh
    
Il faut ensuite lui donner le mot de passe, à l'aide de la commande ssh-add.
      borel1% ssh-add
    
Tous les processus fils (xterm, etc.) connaîtrons alors ce mot de passe.

8. Pour ne plus avoir à taper son mot de passe sans cesse (bis)

Au lieu de donne un nom de shell à la commande ssh-agent, on peut carrément lui donner le script qui lance un environement graphique. Sur une machine isolée :
      ssh-agent startx
    
Sur un terminal X, on met le contenu du ~/.xsession dans le ~/.xinitrc et on remplace le ~/.xsession par les lignes suivantes.
#!/bin/sh

if [ -d $HOME/.ssh ]
then EXEC="exec ssh-agent"
else EXEC="exec"
fi
if [ -x $HOME/.xinitrc ]
then $EXEC $HOME/.xinitrc
else $EXEC xterm -geometry 80x24+0-60 -ls
fi
    
Il faudra alors donner le mot de passe à la commande ssh-add dans une fenêtre quelconque : les connections, provenant d'une fenêtre quelconque, ne demanderont pas de mot de passe.

8. Pour en savoir plus


zoonek@Math.Jussieu.Fr
Last modified: Tue May 2 14:38:42 CEST 2000