Les administrateurs système Linux utilisent quotidiennement SSH pour se connecter d'un système à un autre. La raison en est que c'est le protocole de facto pour se connecter en toute sécurité aux systèmes Linux. Il est sécurisé car tout le trafic entre les systèmes est crypté, y compris l'échange de connexion initial. La seule chose que nous, les administrateurs système, utilisons Telnet de nos jours est de tester une connexion à distance à un serveur Web ou à un port distant. OK, je l'admets, j'ai été connu pour pirater un serveur de messagerie ou deux en utilisant Telnet mais c'est une histoire pour une autre fois. Je digresse. Vous pouvez également utiliser des commandes liées à SSH pour transférer des fichiers entre des hôtes à l'aide de SFTP ou SCP, soit à un système distant ou depuis un système distant. Mais je suis sur le point de vous montrer un tour de magie SSH sympa qui impressionnera vos amis et peut-être même que Penn et Teller ne comprendront pas comment vous l'avez fait.
Remarque : Cette procédure implique l'échange de clés SSH entre les hôtes et le résultat est que vous n'avez plus besoin d'émettre un mot de passe pour établir la connexion.
Prérequis :génération de clé SSH
Avant de pouvoir réaliser cette merveille magique, vous devez préparer vos systèmes à utiliser des clés SSH entre eux. En fait, cette étape est facultative, mais pour vous faciliter la vie, je vous recommande de l'effectuer.
Par souci de simplicité, dans cet exemple, nous avons trois systèmes :host1, host2 et host3 qui utilisent respectivement les adresses IP 10.10.1.50, 10.10.1.60 et 10.10.1.70. Le tableau ci-dessous pourrait être une manière plus claire de présenter ce scénario.
hôte1 | hôte2 | hôte3 |
10.10.1.50 | 10.10.1.60 | 10.10.1.70 |
Connectez-vous à host1 et lancez la commande suivante pour générer la clé SSH.
[host1] $ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <ENTER>
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <ENTER>
Enter same passphrase again: <ENTER>
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:
SHA256:XWk+zJ5Kphe/sT78yg1jLdQCybN4dE2o52eOihEuwPo root@rhel8
The key's randomart image is:
+---[RSA 2048]----+
| .. |
| . ..+ |
| *.= . |
| . +.@.. |
| o S +oB . |
| . . . o.o.=o |
| . . o o+O=. |
| . . *.+=B. |
| E o.oo*=o |
+----[SHA256]-----+
Acceptez les valeurs par défaut en appuyant trois fois sur la touche ENTER pour continuer comme indiqué ci-dessus. J'ai placé le texte
Copier les clés
Cette étape doit être effectuée sur tous les hôtes dans les deux sens afin que les transferts de fichiers et les autres connexions de type SSH puissent se dérouler sans entrave par des invites de mot de passe. C'est la méthode la plus simple pour échanger des clés entre hôtes.
Exécutez les commandes suivantes de host1 à host2 (10.10.1.60)
[host1] $ ssh-copy-id khess@host2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host2 (10.10.1.60)' can't be established.
ECDSA key fingerprint is SHA256:fM/5eaHGa37W+0xq4QZfL+Y6NobRbCVH1G4uhQLAwMw.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host2's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'khess@host2'"
and check to make sure that only the key(s) you wanted were added.
Et lancez maintenant la même commande de host1 à host3 (10.10.1.70)
[host1] $ ssh-copy-id khess@host3
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/khess/.ssh/id_rsa.pub"
The authenticity of host 'host3 (10.10.1.70)' can't be established.
RSA key fingerprint is SHA256:Y0X9C7rVNiRgM4yuBH8DUOUed5d/N57VYO+aoRmXmP4.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
khess@host3's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'khess@host3'"
and check to make sure that only the key(s) you wanted were added.
Désormais, toute transaction de type SSH sera sans mot de passe de host1 à host2 et de host1 à host3.
Répétez ce processus pour les hôtes 2 et 3.
[host2] $ ssh-copy-id khess@host1
[host2] $ ssh-copy-id khess@host3
[host3] $ ssh-copy-id khess@host1
[host3] $ ssh-copy-id khess@host2
Cela copie les clés entre tous les hôtes de sorte que désormais toute transaction de type SSH vers ou depuis n'importe quel hôte sera sans mot de passe. Testez le vôtre pour vous le prouver.
Faire en sorte que la normalité se produise
À des fins de test, créez un nouveau fichier sur chaque système dans votre répertoire personnel en tant que
Comme exercice préliminaire non magique, connectez-vous à host1 et copiez le fichier host1.txt dans host2 et host3. Vous devez spécifier le chemin d'accès complet au fichier de destination.
[host1] $ scp host1.txt khess@host2:/home/khess/host1.txt
host1.txt 100% 0 0.0KB/s 00:00
[host1] $ scp host1.txt khess@host3:/home/khess/host1.txt
host1.txt 100% 0 0.0KB/s 00:00
Les fichiers sont vides et vous voyez donc que la taille est de 0 et que le taux de transfert est de 0,0 Ko/s. Ces nombres seraient différents si le fichier avait une taille quelconque. Cet exercice a exactement le même aspect si vous vous connectez à host2 ou host3 et copiez les fichiers locaux sur les autres systèmes distants. Ce n'est pas particulièrement intéressant ou magique.
Magie :la copie
Donc, pour mon dernier tour de copie de fichier, la vraie magie de copier un fichier d'un hôte à un autre hôte sans se connecter à l'un d'eux à partir d'un troisième hôte. Il ressemble à ceci :
Lancez une session SCP à partir de host1 qui copie le fichier host2.txt de host2 à host3. Voyons comment cela ressemble à la ligne de commande. Vous devez spécifier le chemin exact à la fois sur le système source et sur le système cible.
[host1] $ scp khess@host2:/home/khess/host2.txt khess@host3:/home/khess/host2.txt
host2.txt 100% 0 0.0KB/s 00:00
Le fichier host2.txt est copié de host2 à host3 sans connexion. Magique.
De manière générique, cette commande ressemble à :
[hostX] $ scp user@source_host:/path/to/file user@target_host:/path/to/file
Vous pouvez renommer le fichier cible lors de la copie. Voyez-vous des possibilités de scripts automatisés à l'aide de ce tour de magie ?
Et c'est là que vous vous exclamez :"Wow, c'est magique !"
Conclusion
SSH, comme vous pouvez le voir, n'est pas qu'une chose. Il s'agit d'un protocole sécurisé utilisé pour interagir avec un ordinateur, copier des fichiers et sécuriser d'autres types de communications, comme dans le "service X sur SSH". Cet article vous a montré comment configurer les clés SSH afin que vous n'ayez pas à saisir un mot de passe pour vous connecter à un système distant, pour copier des fichiers sur un système distant ou pour copier des fichiers entre deux systèmes distants. La configuration de clés SSH entre les systèmes signifie que vous pouvez facilement automatiser des tâches telles que la manipulation de fichiers sans stocker de mot de passe dans un fichier. Et utiliser SSH/SCP de cette manière n'est pas vraiment magique, mais vous le saviez probablement déjà.