Outils pour utilisateurs

Outils du site


sysadmin:unix:ssh-keys

Utiliser des clefs avec SSH

Pour une utilisation en mode graphique (Mac OS X et Windows), voir Génération et gestion de clés SSH.

Commençons par créer les clefs :

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/users/pc/.ssh/id_rsa): /users/pc/.ssh/toto
Enter passphrase (empty for no passphrase): # Votre passphrase
Enter same passphrase again: # Votre passphrase
Your identification has been saved in /users/pc/.ssh/toto.
Your public key has been saved in /users/pc/.ssh/toto.pub.
The key fingerprint is: 15:8f:50:83:48:96:ad:34:b1:a5:33:77:a6:d3:62:55 pc@johan-von-neumann

Nous venons de créer une clef RSA (option -t rsa). Nous aurions pu spécifier la taille (option -b 2048 pour 2048 bits par exemple).

Nous pourrons changer notre phrase secrète plus tard, avec l'option -p :

$ ssh-keygen -p -f .ssh/toto
Enter old passphrase: # Votre passphrase initiale
Key has comment '.ssh/toto'
Enter new passphrase (empty for no passphrase): # Votre nouvelle passphrase
Enter same passphrase again: # Votre nouvelle passphrase
Your identification has been saved with the new passphrase.

Voyons nos clefs :

$ cat .ssh/toto
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,2DDE634A871AC7ED

t4SfDhxVav6pHcq41nCXsuChBKcE7RDAA+yuB2QqReyx2h9vqsf+nO76sillX2bA
LkY0O93prP2/La6vkhyCaS+u2GNXfHT7879tXWeMkAMZC0qQ2LZU3oSNBJ3KpL9B
[...snip...]
ACIineqZQQKBOf67Dg/HETDkUvz60WgvafBCnVjUxS3lbKJlVToJuiwb0XNeivU+
eZegXKoexDla/DGtWYASj92S7PJkKwsCnkaYge2A7wsnfsWhDyxKIQ==
-----END RSA PRIVATE KEY-----
$ cat .ssh/toto.pub
ssh-rsa AAAAB3[...snip...]Vyjuuvw== pc@johan-von-neumann

Le fichier .ssh/toto est la clef privée. Elle est chiffrée avec la phrase secrète. Le fichier a des droits restrictifs :

$ ls -l .ssh/toto
-rw-------  1 pc  users  1743 Apr 22 15:07 .ssh/toto

Le contenu du fichier .ssh/toto.pub sera copié sur les machines où nous allons nous connecter.

Installation de la clef publique

$ cat .ssh/toto.pub | \
? ssh machine_distante "mkdir .ssh ; \
? chmod 750 .ssh && cat - > .ssh/authorized_keys && \
? chmod 0600 .ssh/authorized_keys"
Password: # Votre mot de passe sur machine_distante

On se connecte :

$ ssh -i .ssh/toto machine_distante
Enter passphrase for .ssh/toto: # Votre passphrase
machine_distante $ 

Ça marche.

Pour ne plus indiquer le fichier de la clef, deux possibilités :

  • renommer ~/.ssh/toto en ~/.ssh/id_rsa et ~/.ssh/toto.pub en ~/.ssh/id_rsa.pub ;
  • modifier ~/.ssh/config comme suit :
    Host machine_distante
    	IdentityFile /users/moi/.ssh/toto

Agent

Lançons un agent ; en C-shell (csh(1) et tcsh(1)) :

> ssh-agent
setenv SSH_AUTH_SOCK /tmp/ssh-VNn20620/agent.20620;
setenv SSH_AGENT_PID 20626;
echo Agent pid 20626;
> setenv SSH_AUTH_SOCK /tmp/ssh-VNn20620/agent.20620;
> setenv SSH_AGENT_PID 20626;

Avec un Bourne-shell (sh(1), ksh(1), bash(1), zsh(1)) :

$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-ijJJ3357/agent.3357; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3358; export SSH_AGENT_PID;
echo Agent pid 3358;
$ SSH_AUTH_SOCK=/tmp/ssh-ijJJ3357/agent.3357; export SSH_AUTH_SOCK;
$ SSH_AGENT_PID=3358; export SSH_AGENT_PID;

Autrement dit, ssh-agent(1) nous a indiqué quelles commandes lancer, on les a copié-collé. On peut aussi piper dans un shell ;-). Les nouvelles variables d'environnement seront utilisées par ssh(1).

Plus qu'à charger la clef :

$ ssh-add ~/.ssh/toto
Enter passphrase for .ssh/toto: # Votre passphrase
$ ssh-add -l
1024 07:06:9f:e6:36:c5:59:33:9a:05:10:2d:7a:9c:fe:a0 .ssh/toto (RSA)

ssh-add(1) utilise évidemment les variables d'environnement pour discuter avec l'agent (on peut avoir plusieurs agents dans plusieurs shells et/ou avec plusieurs clefs). On a bien chargé la clef, ssh-add(1) liste bien la clef nouvellement chargée.

Une fois la clef chargée, plus besoin de retaper ni phrase secrète ni mot de passe.

sysadmin/unix/ssh-keys.txt · Dernière modification: 2009/11/23 15:32 par Pascal Cabaud