GNU/Linux >> Tutoriels Linux >  >> Linux

Un peu de magie de copie de fichier SSH en ligne de commande

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 dans la capture d'écran. Vous ne verrez pas ces entrées dans la fenêtre de votre terminal. Vous avez généré la clé SSH pour cet hôte. Répétez ce processus sur host2 et sur host3.

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 , de sorte qu'un host1 vous ayez host1.txt, sur host2 vous ayez host2.txt et sur host3 vous ayez host3.txt.

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à.


Linux
  1. Créer des fichiers en utilisant la ligne de commande sous Linux

  2. Comment utiliser la commande ssh-keygen pour configurer ssh sans mot de passe

  3. Importation CSV PostgreSQL depuis la ligne de commande

  4. Comment effacer le contenu d'un fichier depuis la ligne de commande ?

  5. Alternative à la ligne de commande SSH d'Ubuntu

Copier un fichier dans plusieurs répertoires à partir de la ligne de commande sous Linux

Afficher le contenu d'un fichier dans la ligne de commande Linux

Utilisation de Google Drive à partir de la ligne de commande Linux

5 commandes pour afficher le contenu d'un fichier en ligne de commande Linux

Comment obtenir l'URL du fichier Dropbox à partir de la ligne de commande ?

SSH - Comment inclure la commande -t dans le fichier ~/.ssh/config