Connexion à une machine distante (ssh, scp, sftp) sans saisir le mot de passe

opensshPour pouvoir se connecter à une machine distante sans être obligé de saisir un mot de passe, il faut utiliser un système d'authentification par clé privée / publique.

Ce système est très pratique dans le cas où vous utilisez les commandes ssh, scp et sftp dans des scripts.

Pour cela, il suffit d'utiliser la commande ssh-keygen.

 

Pré-requis :

Avoir un client SSH sur le poste client (openssh-client installé par défaut sur Ubuntu)
Sinon, installé le paquet suivant :

$ sudo apt-get install openssh-client

Avoir un serveur SSH sur la machine distante.
Installé, par exemple, openssh-server :

$ sudo apt-get install openssh-server

Génération d'une paire de clé privée / publique sur la machine client :

Dans l'exemple suivant, le poste client se nomme zeus et la machine distante zimbra.

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):# Laisser la valeur par défaut
Enter passphrase (empty for no passphrase):# Appuyer directement sur "Entrée"
Enter same passphrase again:# Appuyer directement sur "Entrée"
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
a0:f3:e4:93:12:c4:41:5e:f3:ea:23:0e:79:f0:02:35 root@zeus
The key's randomart image is:
+--[ RSA 2048]----+
|   .o o          |
|   o o o         |
|  E + . .        |
| . o . o         |
|. . + o S        |
| . + B .         |
|  + = B          |
|   = o o         |
|    .            |
+-----------------+
$

Vérifier que les clés privée et publique ont bien été créées :

Les clés id_rsa et id_rsa.pub sont générées dans le répertoire $HOME/.ssh

$ cd $HOME/.ssh
$ ls -l
total 16
-rw------- 1 root root 1675 2011-12-21 19:43 id_rsa
-rw-r--r-- 1 root root  391 2011-12-21 19:43 id_rsa.pub
-rw-r--r-- 1 root root 4420 2011-11-02 21:25 known_hosts
$

Copier la clé publique id_rsa.pub du poste client dans le réperoire $HOME/.ssh de la machine distante via ssh-copy-id :

$ ssh-copy-id -i id_rsa.pub root@zimbra
root@zimbra's password:    # Saisir le mot de passe et appuyer sur "Entrée"
Now try logging into the machine, with "ssh 'root@zimbra'", and check in:
 
     .ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
 
$

Comme indiqué dans le message précédent, se connecter au serveur distant afin de vérifier que la clé publique a bien été ajoutée au fichier ".ssh/authorized_keys" (si la procédure a fonctionnée correctement, aucun mot de passe ne doit être demandé) :

$ ssh -l root zimbra

Se rendre dans le répertoire $HOME/.ssh :

$ cd $HOME/.ssh
$ ls -l
total 12
-rw-r--r-- 1 root root 391 2011-12-21 20:40 authorized_keys
-rw-r--r-- 1 root root 442 2011-05-20 08:53 known_hosts
-rw-r--r-- 1 root root 391 2011-12-21 20:26 ma_cle_publique
$ cat authorized_keys       # Contenu du fichier "authorized_keys"
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA492yBTCnwE3B7Xws0+bLYJt5G3tBI2P1v1Ld7Alp7FpJmBGzwwF
/dTwv+zh5Xr6ti2ElLQaotKj2YsR8WhFBAQqWcUR4J5/RLhMFttkANVp+3ixeDI8Id609JYcTACMz1h/lOFs38lp17KwwPZW1+tWBFovR4bwVpBNMucbuFy30LsarzdZsWnAiYfU/sLHRm/4cBZq1BF/fHjvaU3PT5NVsEuDyQg3vloW4vkAHErg6CUhp9GEUbBAPXqw== root@zeus
$ exit       # On quitte la machine distante

Pour se connecter à un serveur par un autre port que celui par défaut, utiliser la commande suivante :

$ ssh-copy-id -i id_rsa.pub "-p 10022 root@zimbra"

ou

$ ssh-copy-id -i id_rsa.pub -p 10022 root@zimbra


La procédure est terminée.

Vous pouvez désormais vous connecter à cette machine distante via ssh, scp ou sftp sans avoir à saisir un mot de passe.

Par contre, il faut être conscient des risques que cela peut engendrer.
N'importe qui ayant accès à la machine client aura automatiquement accès à la machine distante.
Ceci est à faire dans le cas où vous n'avez pas d'autres solutions.

Voir également cet article.


Dans l'exemple précédent, l'authentification automatique concernait l'utilisateur root de la machine zeus entre l'utilisateur root de la machine zimbra mais il est tout à fait possible de paramétrer une authentification automatique pour des utilisateurs différents entre le poste client et la machine distante.

Exemple :

Paramétrer une authentification automatique entre l'utilisateur toto du poste client client1 et l'utilisateur tutu de la machine distante serveur1.

Pour cela, il suffit de générer les clés privée/publique pour l'utilisateur toto sur le poste client client1 et de copier le contenu de la clé publique id_rsa.pub dans le fichier "authorized_keys" dans le répertoire $HOME/.ssh de l'utilisateur tutu de la machine distante serveur1.

La connexion suivante se fera sans saisie de mot de passe :

toto@client1:~$ ssh -l tutu serveur1

Commentaires

j'arrive pas à se connecter sans mot de passe

Il faut bien générer une clé privée/publique sans phrase de passe avec la commande ssh-keygen -t rsa

Il faut ensuite copier la clé publique sur la machine distante avec la commande ssh-copy-id -i id_rsa.pub user@machine_distante

Lors de la copie de la clé publique avec la commande "ssh-copy-id", le mot de passe est demandé mais une fois la clé copiée, le mot de passe ne sera plus demandé lors d'une connexion ssh.

Ajouter un commentaire

Filtered HTML

  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Les lignes et les paragraphes vont à la ligne automatiquement.

Plain text

  • Aucune balise HTML autorisée.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
CAPTCHA
Cette question permet de s'assurer que vous êtes un utilisateur humain et non un logiciel automatisé de pollupostage.
CAPTCHA visuel
Entrez les caractères (sans espace) affichés dans l'image.