Comment se connecter d'une machine A à une machine B par ssh sans saisir sa passphrase au clavier.

  1. Se générer sur la machine A une paire de clé publique/privée. Elle sont stockées par défaut dans $HOME/.ssh
    genaud@pc3c103:~$ ssh-keygen
    Generating public/private rsa key pair.
    Enter file in which to save the key (/users/prof/genaud/.ssh/id_rsa):
    Created directory '/users/prof/genaud/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /users/prof/genaud/.ssh/id_rsa.
    Your public key has been saved in /users/prof/genaud/.ssh/id_rsa.pub.
    The key fingerprint is:
    f4:f8:78:55:2d:e7:1b:5a:6c:1e:28:a2:d2:74:20:54 genaud@pc3c103
    genaud@pc3c103:~$
    
  2. Dire sur la machine B, quelle clé publique peut être présentée pour autoriser une connexion sans mot de passe. Si on est en NFS (le cas sur les pc3cxx) il suffit de faire sur la machine A ou B:
    genaud@pc3c103:~$ cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys
    
    Sinon, copier la clé publique générée sur la machine A, dans $HOME/.ssh/authorized_keys sur la machine B.
  3. Lancer un agent sur la machine A chargé de faire le single-signon. (Si cet agent n'est pas lancé, la manipulation précédente vous permet de ne pas rentrer votre mot de passe, mais demande la passphrase qui crypte votre clé privée ... ce qui demande autant de manipulations.) On lance un agent qui signe le shell courant (tous les ssh lancés à partir de ce shell seront automatiquement signés par l'agent, i.e. c'est comme si l'agent tapait votre passphrase pour vous).
    genaud@pc3c103:~$ ssh-agent $SHELL
    genaud@pc3c103:~$ ssh-add
    Enter passphrase for /users/prof/genaud/.ssh/id_rsa:
    Identity added: /users/prof/genaud/.ssh/id_rsa (/users/prof/genaud/.ssh/id_rsa)
    
  4. On peut maintenant se connecter en ssh de A à B sans interruption.

Pour aller plus loin: Signer la session X entière avec un agent.

Il faut recommencer la manipulation précédente pour chaque shell. On peut signer le processus X et tous ses descendants (dont les xterm, gnome-terminal, etc) en démarrant l'agent par le fichier ~/.xsession.
#!/bin/bash

# Lancement de l'agent d'authentification (-s pour bash)
export SSH_ASKPASS="/usr/lib/openssh/gnome-ssh-askpass"
eval `ssh-agent`
ssh-add .ssh/id_dsa < /dev/null
gnome-session
ssh-agent -k