Connexion à une machine distante (ssh, scp, sftp) sans saisir le mot de passe
Pour 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
houria (non vérifié)
mar, 07/05/2013 - 15:40
Permalien
aide
j'arrive pas à se connecter sans mot de passe
ronan
mar, 07/05/2013 - 16:08
Permalien
Il faut bien générer une clé
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