GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ein kleiner SSH-Dateikopierzauber auf der Kommandozeile

Linux-Systemadministratoren verwenden SSH täglich, um sich von einem System zum anderen zu verbinden. Der Grund dafür ist, dass es sich um das Defacto-Protokoll für sichere Verbindungen zu Linux-Systemen handelt. Es ist sicher, da der gesamte Datenverkehr zwischen den Systemen verschlüsselt ist, einschließlich des anfänglichen Login-Austauschs. Das Einzige, wofür wir Systemadministratoren Telnet heutzutage verwenden, ist das Testen einer Remote-Verbindung zu einem Webserver oder zu einem Remote-Port. OK, ich gebe es zu, ich bin dafür bekannt, einen oder zwei E-Mail-Server mit Telnet zu hacken, aber das ist eine andere Geschichte. Ich schweife ab. Sie können auch SSH-bezogene Befehle verwenden, um Dateien zwischen Hosts mit SFTP oder SCP zu übertragen, entweder nach einem entfernten System oder von ein entferntes System. Aber ich werde Ihnen gleich einen coolen SSH-Zaubertrick zeigen, der Ihre Freunde beeindrucken und möglicherweise sogar Penn und Teller verblüffen wird, wie Sie es gemacht haben.

Hinweis: Dieses Verfahren beinhaltet den Austausch von SSH-Schlüsseln zwischen Hosts und das Ergebnis ist, dass Sie kein Passwort mehr vergeben müssen, um die Verbindung herzustellen.

Voraussetzung:Generierung von SSH-Schlüsseln

Bevor Sie dieses magische Wunder vollbringen können, müssen Sie Ihre Systeme darauf vorbereiten, SSH-Schlüssel zwischen ihnen zu verwenden. Eigentlich ist dieser Schritt optional, aber um Ihnen das Leben zu erleichtern, empfehle ich Ihnen, ihn auszuführen.

Der Einfachheit halber haben wir in diesem Beispiel drei Systeme:host1, host2 und host3, die die IP-Adressen 10.10.1.50, 10.10.1.60 bzw. 10.10.1.70 verwenden. Die folgende Tabelle könnte dieses Szenario deutlicher darstellen.

host1 host2 host3
10.10.1.50 10.10.1.60 10.10.1.70

Melden Sie sich bei host1 an und geben Sie den folgenden Befehl ein, um den SSH-Schlüssel zu generieren.

[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]-----+

Akzeptieren Sie die Standardeinstellungen, indem Sie dreimal die EINGABETASTE drücken, um wie oben gezeigt fortzufahren. Ich habe den Text in den Screenshot eingefügt. Sie werden diese Einträge nicht in Ihrem Terminalfenster sehen. Sie haben den SSH-Schlüssel für diesen Host generiert. Wiederholen Sie diesen Vorgang auf host2 und auf host3.

Schlüssel kopieren

Dieser Schritt muss auf allen Hosts in beide Richtungen durchgeführt werden, damit Dateiübertragungen und andere SSH-Verbindungen ungehindert von Passwortabfragen fortgesetzt werden können. Dies ist die einfachste Methode zum Austauschen von Schlüsseln zwischen Hosts.

Geben Sie die folgenden Befehle von host1 an host2 (10.10.1.60)

aus
[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.

Geben Sie nun den gleichen Befehl von host1 an host3 (10.10.1.70)

aus
[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.

Jetzt ist jede SSH-artige Transaktion passwortlos von Host1 zu Host2 und von Host1 zu Host3.

Wiederholen Sie diesen Vorgang für die Hosts 2 und 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

Dadurch werden Schlüssel zwischen allen Hosts kopiert, so dass jetzt jede SSH-Transaktion zu oder von jedem Host passwortlos ist. Testen Sie Ihre, um es sich selbst zu beweisen.

Das Normale geschehen lassen

Erstellen Sie zu Testzwecken auf jedem System in Ihrem Home-Verzeichnis eine neue Datei als , sodass Sie auf host1 host1.txt, auf host2 host2.txt und auf host3 host3.txt haben.

Melden Sie sich als vorläufige, nicht magische Übung bei host1 an und kopieren Sie die Datei host1.txt auf host2 und auf host3. Sie müssen den vollständigen Pfad zur Zieldatei angeben.

[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

Die Dateien sind leer und daher sehen Sie, dass die Größe 0 und die Übertragungsrate 0,0 KB/s beträgt. Diese Zahlen wären anders, wenn die Datei eine beliebige Größe hätte. Diese Übung sieht genauso aus, wenn Sie sich entweder bei host2 oder host3 anmelden und die lokalen Dateien auf die anderen Remote-Systeme kopieren. Das ist nicht besonders interessant oder magisch.

Magie:Das Kopieren

Also für meinen letzten Trick zum Kopieren von Dateien, die wahre Magie, eine Datei von einem Host auf einen anderen Host zu kopieren, ohne sich bei einem der beiden von einem dritten Host anzumelden. Es sieht so aus:

Initiieren Sie eine SCP-Sitzung von Host1, die die Datei host2.txt von Host2 nach Host3 kopiert. Mal sehen, wie das auf der Kommandozeile aussieht. Sowohl auf dem Quellsystem als auch auf dem Zielsystem müssen Sie den genauen Pfad angeben.

[host1] $ scp khess@host2:/home/khess/host2.txt khess@host3:/home/khess/host2.txt

host2.txt                                                                 100%    0     0.0KB/s   00:00  

Die Datei host2.txt wird ohne Anmeldung von host2 nach host3 kopiert. Magie.

Allgemein sieht dieser Befehl so aus:

[hostX] $ scp user@source_host:/path/to/file user@target_host:/path/to/file

Sie können die Zieldatei während des Kopierens umbenennen. Sehen Sie mit diesem Zaubertrick irgendwelche automatisierten Scripting-Möglichkeiten?

Und hier rufen Sie aus:„Wow, das ist Magie!“

Abschluss

Wie Sie sehen können, ist SSH nicht nur eine Sache. Es ist ein sicheres Protokoll, das für die Interaktion mit einem Computer, das Kopieren von Dateien und das Sichern anderer Arten von Kommunikation verwendet wird, wie in "X-Dienst über SSH". Dieser Artikel hat Ihnen gezeigt, wie Sie SSH-Schlüssel einrichten, damit Sie kein Passwort eingeben müssen, um sich bei einem Remote-System anzumelden, Dateien auf ein Remote-System zu kopieren oder Dateien zwischen zwei Remote-Systemen zu kopieren. Das Einrichten von SSH-Schlüsseln zwischen Systemen bedeutet, dass Sie Aufgaben wie die Dateimanipulation einfach automatisieren können, ohne ein Passwort in einer Datei zu speichern. Und die Verwendung von SSH/SCP auf diese Weise ist nicht wirklich magisch, aber das wussten Sie wahrscheinlich bereits.


Linux
  1. Verwenden von Google Drive über die Linux-Befehlszeile

  2. Manipulieren von X-Tasten- und Zeigergriffen in der Befehlszeile?

  3. So verwenden Sie den Befehl ssh-keygen, um passwortloses ssh zu konfigurieren

  4. Ein kleiner Trick:Wählen Sie mit shuf eine zufällige Datei oder Zeile in der Datei aus

  5. Wie kann ich SVN in der Befehlszeile ein SSH-Passwort bereitstellen?

Kopieren Sie eine Datei in mehrere Verzeichnisse von der Befehlszeile unter Linux

Zeigen Sie den Inhalt einer Datei in der Linux-Befehlszeile an

5 Befehle zum Anzeigen des Inhalts einer Datei in der Linux-Befehlszeile

Wie lösche ich den Inhalt einer Datei über die Befehlszeile?

Wie kann ich einen Ordner über die Linux-Befehlszeile kopieren?

Wie erhalte ich die URL der Dropbox-Datei von der Befehlszeile?