Einführung
SSH ermöglicht den verschlüsselten Zugriff über die Befehlszeile auf ein anderes Linux-Konto. SCP verwendet dieselbe Authentifizierung und denselben Transport, um Dateien zu kopieren. Bei der ersten sicheren Verbindung wird der Hostschlüssel des Servers überprüft. Spätere Verbindungen können statt der wiederholten Eingabe des Kontopassworts einen persönlichen Schlüssel verwenden.
In diesem Lab verwenden Sie das isolierte Konto remoteuser auf localhost als Remote-Host. Obwohl beide Konten dieselbe Trainings-VM nutzen, verhalten sich das SSH-Protokoll, die Authentifizierungsabfragen, das Remote-Home-Verzeichnis und die Dateiübertragungen wie in einem einfachen Workflow mit zwei Hosts. Der standardmäßige SSH-Zugriffspfad von labex wird nicht geändert.
SSH-Ziel untersuchen
In diesem Schritt identifizieren Sie den SSH-Client, lösen den Zielnamen auf, bestätigen einen lauschenden Server und zeigen den öffentlichen Hostschlüssel an.
Wechseln Sie in den lokalen Arbeitsbereich:
cd /home/labex/project/ssh-lab
Zeigen Sie die Version des OpenSSH-Clients an. Dieses Programm schreibt seine Version auf die Standardfehlerausgabe. Daher kombiniert 2>&1 die Standardfehlerausgabe mit der Standardausgabe:
ssh -V 2>&1
Lösen Sie das lokale Ziel über die systemweite Name-Service-Konfiguration auf:
getent hosts localhost
Bestätigen Sie, dass ein SSH-Server auf dem TCP-Port 22 lauscht:
sudo ss -ltnp | grep ':22'
ssh-keyscan ruft öffentliche Hostschlüssel ab, ohne eine Anmeldung durchzuführen. Leiten Sie den ED25519-Schlüssel an ssh-keygen -lf - weiter, um seinen Fingerabdruck anzuzeigen:
ssh-keyscan -t ed25519 localhost 2>/dev/null | ssh-keygen -lf -
Vergleichen Sie in einer realen Umgebung diesen Fingerabdruck mit einem vertrauenswürdigen Wert des Administrators, bevor Sie ihn akzeptieren. Speichern Sie eine kompakte Zusammenfassung des Ziels:
printf 'target=localhost\nport=22\nuser=remoteuser\n' > ssh-target.txt
cat ssh-target.txt
Erste Remote-Shell öffnen
In diesem Schritt überprüfen Sie einen Hostschlüssel, authentifizieren sich mit einem Passwort, untersuchen das Remote-Konto und schließen anschließend die Remote-Shell.
Stellen Sie die Verbindung mit dem Format user@host her:
ssh remoteuser@localhost
Da die Einrichtung alle bisherigen Hostschlüsseleinträge für localhost entfernt hat, fragt SSH, ob Sie dem angezeigten Fingerabdruck vertrauen. Vergleichen Sie ihn mit dem Fingerabdruck aus Schritt 1 und geben Sie anschließend Folgendes ein:
yes
Geben Sie an der Passwortabfrage Folgendes ein:
RemoteLab123!
Während der Eingabe wird das Passwort nicht angezeigt. Nach der Anmeldung gehört die Eingabeaufforderung zu remoteuser, nicht zu labex. Überprüfen Sie die Identität des Remote-Kontos, den Hostnamen und das aktuelle Verzeichnis:
whoami
hostname
pwd
Erstellen Sie im Home-Verzeichnis des Remote-Kontos eine Markierungsdatei:
mkdir -p ~/ssh-lab
printf 'connected as %s\n' "$(whoami)" > ~/ssh-lab/connected.txt
Schließen Sie die Remote-Shell und kehren Sie zur lokalen Eingabeaufforderung von labex zurück:
exit
Der Befehl exit beendet nur die Remote-Shell. Das lokale Terminal bleibt geöffnet.
Remote-Befehl ausführen
In diesem Schritt führen Sie Befehle remote aus, ohne eine länger laufende interaktive Shell zu öffnen, und speichern deren Ausgabe lokal.
Wechseln Sie bei Bedarf zurück in den lokalen Arbeitsbereich:
cd /home/labex/project/ssh-lab
Setzen Sie einen Befehl in Anführungszeichen hinter den Host. SSH führt ihn remote aus und gibt die Ausgabe in Ihrem lokalen Terminal aus:
ssh remoteuser@localhost 'whoami; uname -srm; uptime'
Geben Sie bei der Abfrage RemoteLab123! ein. Die Semikolons trennen die Befehle, die von der Remote-Shell interpretiert werden.
Führen Sie einen zweiten Remote-Befehl aus und leiten Sie die zurückgegebene Ausgabe in eine lokale Datei um:
ssh remoteuser@localhost 'printf "remote_user=%s\nremote_home=%s\n" "$(whoami)" "$HOME"' > remote-context.txt
Geben Sie das Passwort erneut ein. Die Umleitung mit > wird von Ihrer lokalen Shell verarbeitet. Deshalb wird remote-context.txt im lokalen Arbeitsbereich erstellt:
cat remote-context.txt
Die Datei sollte remoteuser und /home/remoteuser ausweisen.
Datei mit SCP übertragen
In diesem Schritt laden Sie eine lokale Datei hoch, untersuchen ihren Inhalt remote und laden sie unter einem neuen lokalen Namen wieder herunter.
Erstellen Sie ein lokales Konfigurationsbeispiel:
cd /home/labex/project/ssh-lab
printf 'mode=training\nport=8080\n' > app.conf
SCP verwendet für einen Remote-Pfad das Format user@host:path. Laden Sie die Datei in das vorbereitete Remote-Verzeichnis incoming hoch:
scp app.conf remoteuser@localhost:/home/remoteuser/incoming/app.conf
Geben Sie bei der Abfrage RemoteLab123! ein. Überprüfen Sie den Remote-Inhalt mit SSH:
ssh remoteuser@localhost 'cat /home/remoteuser/incoming/app.conf'
Geben Sie das Passwort erneut ein. Vertauschen Sie nun Quelle und Ziel, um die Datei herunterzuladen:
scp remoteuser@localhost:/home/remoteuser/incoming/app.conf downloaded-app.conf
Geben Sie das Passwort ein und vergleichen Sie anschließend das lokale Original mit der heruntergeladenen Kopie:
cmp app.conf downloaded-app.conf && echo "The files match"
Verzeichnis rekursiv übertragen
In diesem Schritt verwenden Sie den rekursiven Modus von SCP, um einen Verzeichnisbaum in das Remote-Konto zu kopieren.
Erstellen Sie einen kleinen lokalen Projektbaum:
cd /home/labex/project/ssh-lab
mkdir -p site/assets
printf '<h1>SSH transfer practice</h1>\n' > site/index.html
printf 'body { color: navy; }\n' > site/assets/style.css
Die Option -r kopiert Verzeichnisse und deren Inhalte rekursiv:
scp -r site remoteuser@localhost:/home/remoteuser/incoming/
Geben Sie bei der Abfrage RemoteLab123! ein. Listen Sie den Remote-Verzeichnisbaum mit einem einmalig ausgeführten SSH-Befehl auf:
ssh remoteuser@localhost 'find /home/remoteuser/incoming/site -type f -printf "%P\n" | sort'
Geben Sie das Passwort erneut ein. Die Ausgabe sollte assets/style.css und index.html enthalten.
Persönlichen SSH-Schlüssel generieren
In diesem Schritt erstellen Sie ein eigenes ED25519-Schlüsselpaar und überprüfen seine Berechtigungen und seinen Fingerabdruck.
Ein Schlüsselpaar besteht aus einem privaten Schlüssel, der bei Ihnen bleibt, und einem öffentlichen Schlüssel, der in einem Remote-Konto installiert werden kann. Generieren Sie einen eigenen Übungsschlüssel ohne Passphrase, damit die automatisierte Validierung ihn verwenden kann:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/labex_remote_ed25519 -N '' -C 'labex-remote-practice'
Die Option -t wählt den Algorithmus, -f die Datei, -N '' setzt eine leere Übungs-Passphrase und -C fügt eine Bezeichnung hinzu. Produktionsschlüssel sollten normalerweise eine starke Passphrase verwenden, sofern sie nicht durch Anforderungen an die Automatisierung ausgeschlossen wird.
Untersuchen Sie die beiden Dateien und ihre Berechtigungen:
ls -l ~/.ssh/labex_remote_ed25519 ~/.ssh/labex_remote_ed25519.pub
Der private Schlüssel sollte nur für labex lesbar sein. Die Datei .pub ist zur Weitergabe vorgesehen. Zeigen Sie den Fingerabdruck des öffentlichen Schlüssels an:
ssh-keygen -lf ~/.ssh/labex_remote_ed25519.pub
Kopieren Sie den privaten Schlüssel niemals und geben Sie ihn nicht weiter.
Öffentlichen Schlüssel installieren und verwenden
In diesem Schritt installieren Sie den öffentlichen Schlüssel für remoteuser, stellen eine Verbindung ohne Passwortabfrage her und überprüfen die schlüsselbasierte Dateiübertragung.
ssh-copy-id hängt einen öffentlichen Schlüssel mit passenden Berechtigungen an ~/.ssh/authorized_keys des Remote-Kontos an:
ssh-copy-id -i ~/.ssh/labex_remote_ed25519.pub remoteuser@localhost
Geben Sie für diese letzte passwortbasierte Authentifizierungsaktion RemoteLab123! ein. Testen Sie den privaten Schlüssel mit der Option -i:
ssh -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost 'printf "key authentication works\n" > ~/ssh-lab/key-authenticated.txt; cat ~/ssh-lab/key-authenticated.txt'
Dieser Befehl sollte nicht nach dem Passwort des Remote-Kontos fragen. Verwenden Sie dieselbe Identität für SCP:
scp -i ~/.ssh/labex_remote_ed25519 remoteuser@localhost:~/ssh-lab/key-authenticated.txt key-authenticated.txt
cat key-authenticated.txt
Die heruntergeladene Datei sollte key authentication works enthalten. Der Hostschlüssel authentifiziert den Server, während Ihr privater Schlüssel Sie gegenüber dem Remote-Konto authentifiziert. Beide Schlüssel lösen unterschiedliche Vertrauensprobleme.
Zusammenfassung
Sie haben einen SSH-Hostschlüssel überprüft, eine Remote-Shell geöffnet und beendet, einmalig ausgeführte Remote-Befehle verwendet und die lokale Umleitung von der Remote-Ausführung unterschieden. Außerdem haben Sie Dateien mit SCP hoch- und heruntergeladen sowie ein Verzeichnis rekursiv kopiert.
Zusätzlich haben Sie ein eigenes ED25519-Schlüsselpaar generiert, den privaten Schlüssel geschützt, nur den öffentlichen Schlüssel installiert und diese Identität für passwortloses SSH und SCP wiederverwendet. Dies sind die grundlegenden Fähigkeiten für eine sichere Remote-Administration auf Einsteigerniveau.



