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