SSH

Copier la clé d'un host dans le fichier authorized_keys d'un host distant

Utilisation de la commande ssh-copy-id :

Principe : Copier la clé contenu dans le fichier ~/.ssh/id_rsa.pub dans le fichier ~/.ssh/authorized_keys d'un host distant (ici, 192.168.0.101)

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

$ cd ~/.ssh
$ ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts
$ ssh-copy-id -i id_rsa.pub root@192.168.0.101
root@192.168.0.101's password:#Saisir ici le mot de passe
Now try logging into the machine, with "ssh 'root@192.168.0.101'", and check in:
 
  ~/.ssh/authorized_keys
 
to make sure we haven't added extra keys that you weren't expecting.
 
$

Sécuriser la connexion ssh par clé en associant une adresse IP/un nom de host à la clé RSA dans le fichier ~/.ssh/authorized_keys

Pour plus de sécurité il est possible d'associer une adresse IP et/ou un nom de host à une clé RSA afin d'éviter l'utilisation de cette clé sur une autre machine.

Exemple d'une clé RSA

$ cat ~/.ssh/authorized_keys
ssh-rsa iMEyIOc6TAw3+w/RBkHXbabKYgI1Y4EDEifBdcmGYMe8MshE6D27NouR1hdFyvsT
LLs+DCALHJNxkitS31HO7QlWAX9YRC1D47neCk29E1SCmG9CeWNyztgAmgI91FD6
yWtWSD3MOW27/rC+CxdXoVNSFNVJ+wKuK5QGUMlAMm+nFJi6evlVLBhGKb5LVNQ6
nszYteN5dpp/asSAU+kHyQsNJPyz1m/w8KZujYpkpV3mJh4GYvBiz2A+JWo/FRbo
3LSdFiVxt9V1rqfrYSXFcHS4jky9HSH/c9b9d1iop6lPBShlLjAf2zpQYfU5Ra7u
TQsO3D1z+dZ8NXARJ4WWHkWyIEyN67q4uKMehscDGYKy3hcyRTlJ0sw0bokNMf99
oGcmN5KKasLvUsIfMyNbSC8bcYdsOb+06QDyHHE9h2aYcoBCgvX4zhkAoDSeMsK2
Bg7h2PdV5S5bLPr/hjLgNky6u9TCbDIJOInqJZwk4/gqPOMbffuKeiN1K2lzyrfk
mX3Nnwm/ivb0IBEYLQs4GM8WyamlJtlj5K32mJfflFwnbj5+dGQhjRZ/jJ1D9PsL
U441033CepoXDIf2cV3I34aZ2V7YxEgsk4rRVEX0mGCYezBn1f4IumQ1Il9ixrEf
FktHyk6kfviQC8wOTRsABiH79KSIIqc3cp9zbOSbn+4= root@ma_machine

Exemple d'une clé RSA avec association d'une adresse IP et/ou d'un nom de host

$ cat ~/.ssh/authorized_keys
from="192.168.1.1,ma_machine.mon_domaine.com" ssh-rsa iMEyIOc6TAw3+w/RBkHXbabKYgI1Y4EDEifBdcmGYMe8MshE6D27NouR1hdFyvsT
LLs+DCALHJNxkitS31HO7QlWAX9YRC1D47neCk29E1SCmG9CeWNyztgAmgI91FD6
yWtWSD3MOW27/rC+CxdXoVNSFNVJ+wKuK5QGUMlAMm+nFJi6evlVLBhGKb5LVNQ6
nszYteN5dpp/asSAU+kHyQsNJPyz1m/w8KZujYpkpV3mJh4GYvBiz2A+JWo/FRbo
3LSdFiVxt9V1rqfrYSXFcHS4jky9HSH/c9b9d1iop6lPBShlLjAf2zpQYfU5Ra7u
TQsO3D1z+dZ8NXARJ4WWHkWyIEyN67q4uKMehscDGYKy3hcyRTlJ0sw0bokNMf99
oGcmN5KKasLvUsIfMyNbSC8bcYdsOb+06QDyHHE9h2aYcoBCgvX4zhkAoDSeMsK2
Bg7h2PdV5S5bLPr/hjLgNky6u9TCbDIJOInqJZwk4/gqPOMbffuKeiN1K2lzyrfk
mX3Nnwm/ivb0IBEYLQs4GM8WyamlJtlj5K32mJfflFwnbj5+dGQhjRZ/jJ1D9PsL
U441033CepoXDIf2cV3I34aZ2V7YxEgsk4rRVEX0mGCYezBn1f4IumQ1Il9ixrEf
FktHyk6kfviQC8wOTRsABiH79KSIIqc3cp9zbOSbn+4= root@ma_machine

Les différentes valeurs doivent être séparées par une virgule.
Le point d'interrogation permet d'indiquer un plage d'adresses IP (from="192.168.0.?").
L'astérisque permet d'indiquer tous les sous-domaines d'un domaine (from="*.mon_domaine.com").
Il est possible d'exclure en ajoutant un point d'exclamation avant (from="!autre_domaine.com").

Etiquettes: 

Manipuler les clés SSH

L'outil ssh-keygen permet d'effectuer différentes manipulations sur les clés SSH.

Générer une clé SSH de type RSA:

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/xxxx/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/xxxx/.ssh/id_rsa
Your public key has been saved in /home/xxxx/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy
The key's randomart image is:
+---[RSA 3072]----+
|   .*=.=.        |
|   o .B *        |
|  . .E B o       |
| . .  o....      |
|=.  .oo.S..      |
|+= . o.o.o       |
|=.=...  .        |
|+B+o. ..o        |
|==+    ..o       |
+----[SHA256]-----+

Le contenu de la clé privée (attention, celui-ci ne doit jamais être partagé)

$ cat .ssh/id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEApgXls7gw98Hr5Q05qB5Dlg7Agzomlm/8Q7k3yawjwgJP5+SNZ0pj
edSm8PnQZnYP00vN8KPLjTWfBo39HRJpylPq8abRs8LeIqAwKOY+7bTGEvcxACvIRd8w/U
wV6XYHVH5w9vT4gW9Lb9J1AOAcaEEcGNUwCPHiqoHa6eA2kg6e36F1ZE9DUYGw2altST7P
smWvFSPMx3eXJLpbsgaGHhzvI6cwpXkbeDILoHjws1GDcmI7X3zya46p3Zrt8cagRi3lKP
cje3xfKoLMLb3zauB8tb7pW41VP4KoplgT7r4bxd/4EkQcG9bv9AoAb7avp6f0ulBvAEw9
...
UZA+eKidhEz4we4ivxwb+GSVbCVBWkWZvEIX5+5tVPJaxi18K6GC+Zw4lOlYe4nwFtDQz8
5KI7LRQSDZrNtNiMJ/R/dOXV9l74ixlafKM1uMd5x23RmSEVzGap/tgwqam+KSeHuKN+zR
O3XW2hyx1TruD3JEcN2/hVUh5bM1q9YcSfrjd/bzFL+tQIs1t9N5TQOn/EYnLHlcsUzhLq
xWp1/EulMM4qMAAAAPcm9uYW5AUEFTUE8wMDg2AQIDBA==
-----END OPENSSH PRIVATE KEY-----

Le contenu de la clé privée (celui ci peut-être partagé avec n'importe qui)

$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmBeWzuDD3wevlDTmoHkOWDsCDOiaWb/xDuTfJrCPCAk/n5I1nSmN51Kbw+dBmdg/TS83wo8uNNZ8Gjf0dEmnKU+rxptGzwt4ioDAo5j7ttMYS9zEAK8hF3zD9TBXpdgdUfnD29PiBb0tv0nUA4BxoQRwY1TAI8eKqgdrp4DaSDp7foXVkT0NRgbDZqW1JPs+yZa8VI8zHd5ckuluyBoYeHO8jpzCleRt4MgugePCzUYNyYjtffPJrjqndmu3xxqBGLeUo9yN7fF8qgswtvfNq4Hy1vulbjVU/gqimWBPuvhvF3/gSRBwb1u/0CgBvtq+np/S6UG8ATD2mBS+mqB687hKB7BzY+SAWgOMfloavV7ms609c5/nQR2UwlQuHDo79Zz3uqbwVh02hRdomZC7Q9Elte9hUgdz5DZOMiC1lOh5Zj+X/POe+Rg/G8eXrbXO0IlaW4MZjqQTG8U7gLrbtkHYxljphI/eGSYnTo5Qmu77EHy0EAe/DE7HGGt0hOEU= xxxx@yyyy

Afficher le fingerprint d'une clé SSH (peu importe la clé fournie, privée ou publique, c'est toujours le fingerprint de la clé publique qui est affiché)

$ ssh-keygen -l -f .ssh/id_rsa
3072 SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy(RSA)
$ ssh-keygen -l -f .ssh/id_rsa.pub
3072 SHA256:LSPtPiOIKudk4CuQzD6MdlyJQh3RQc+xvYJTgHWPQ6E xxxx@yyyy(RSA)

Par défaut le fingerprint est affiché avec le hash SHA256, pour l'afficher avec le hash MD5, il suffit d'ajouter l'option -E avec le paramètre MD5

$ ssh-keygen -l -f .ssh/id_rsa.pub -E md5
3072 MD5:29:3c:60:2a:d2:49:20:82:12:c4:c5:e3:f0:95:2c:b3 xxxx@yyyy(RSA)

Afficher le fingerprint en représentation ASCII

$ ssh-keygen -l -f .ssh/id_rsa.pub -E md5 -v
3072 MD5:29:3c:60:2a:d2:49:20:82:12:c4:c5:e3:f0:95:2c:b3 xxxx@yyyy(RSA)
+---[RSA 3072]----+
|Ooo.. .          |
|=+ = +           |
|. = O            |
| o E o   .       |
|o +   + S        |
|..     o         |
|                 |
|                 |
|                 |
+------[MD5]------+

Recalculer la clé publique d'une clé privée

$ ssh-keygen -y -f .ssh/id_rsa
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCmBeWzuDD3wevlDTmoHkOWDsCDOiaWb/xDuTfJrCPCAk/n5I1nSmN51Kbw+dBmdg/TS83wo8uNNZ8Gjf0dEmnKU+rxptGzwt4ioDAo5j7ttMYS9zEAK8hF3zD9TBXpdgdUfnD29PiBb0tv0nUA4BxoQRwY1TAI8eKqgdrp4DaSDp7foXVkT0NRgbDZqW1JPs+yZa8VI8zHd5ckuluyBoYeHO8jpzCleRt4MgugePCzUYNyYjtffPJrjqndmu3xxqBGLeUo9yN7fF8qgswtvfNq4Hy1vulbjVU/gqimWBPuvhvF3/gSRBwb1u/0CgBvtq+np/S6UG8ATD2mBS+mqB687hKB7BzY+SAWgOMfloavV7ms609c5/nQR2UwlQuHDo79Zz3uqbwVh02hRdomZC7Q9Elte9hUgdz5DZOMiC1lOh5Zj+X/POe+Rg/G8eXrbXO0IlaW4MZjqQTG8U7gLrbtkHYxljphI/eGSYnTo5Qmu77EHy0EAe/DE7HGGt0hOEU= xxxx@yyyy

La preuve que la commande ci-dessus retourne le même résultat que la clé publique d'origine

$ ssh-keygen -y -f .ssh/id_rsa | diff .ssh/id_rsa.pub -
(le retour de la commande est vide indiquant que les contenus sont identiques)

 

Etiquettes: 

known_hosts

Manipuler le fichier "known_hosts"

 

Rechercher dans le fichier "known_hosts" l'entrée correspondante à un host particulier

$ ssh-keygen -H -F 192.168.1.101

$ ssh-keygen -H -F machine.domaine.com

 

Supprimer du fichier "known_hosts" l'entrée correspondante à un host particulier

$ ssh-keygen -R 192.168.1.101

$ ssh-keygen -R machine.domaine.com

 

Obtenir la clé d'un host encodée en base64

$ ssh-keyscan -t rsa,dsa 192.168.1.100

$ ssh-keyscan -t rsa,dsa machine.domaine.com