Linux-Tutorial / Mit SSH verbinden und Dateien mit scp und sftp übertragen

Secure Shell (SSH) bietet verschlüsseltes Fern-Login und Befehlsausführung, während OpenSSH-Tools auch Dateiübertragungen über scp und sftp unterstützen. Überprüfen Sie den Fingerabdruck des Server-Host-Keys bei der ersten Verbindung und behalten Sie die bestehende Anmeldemethode bei, bis die Schlüssel-Authentifizierung getestet wurde.

Überprüfen Sie die Private-Key-Modi mit Dateiberechtigungen und untersuchen Sie Zeitüberschreitungen oder Namensfehler mit Netzwerkdiagnosen. Unter Ubuntu prüfen Sie die Socket-Aktivierung sowie den Dienst mit systemctl status ssh.service ssh.socket; dies bedeutet nicht, dass beide Einheiten immer aktiv sein müssen.

Systemkonfigurationsübungen verwenden eine herkömmliche Ubuntu 26.04 LTS oder Rocky Linux 9 VM als Referenzumgebung. Container, WSL und andere Versionen können sich in Dienst- und Paketkonfiguration unterscheiden. Bereiten Sie die Konsolenwiederherstellung vor und zeichnen Sie Ihre Versionen mit der virtuellen Maschinen-Einrichtungslektion auf.

Installieren Sie den Client und den Server an den richtigen Stellen

Der Computer, auf dem Sie den Befehl eingeben, ist der Client; der Linux-Rechner, auf den Sie sich einloggen, ist der Server. Der Server benötigt eine erreichbare Adresse, ein bestehendes Benutzerkonto, sshd und Netzwerkrichtlinien, die den tatsächlichen SSH-Port erlauben. Verwenden Sie nur den Installationsblock, der zu Ihrer Distribution passt. Unter Ubuntu aktualisiert apt update die Paketmetadaten.

sudo apt update
sudo apt install openssh-server
sudo systemctl enable --now ssh
sudo dnf install openssh-server
sudo systemctl enable --now sshd

Ubuntu verwendet häufig ssh und Rocky Linux verwendet sshd, prüfen Sie jedoch den installierten Dienst. Host-Firewalls, Cloud-Sicherheitsregeln und NAT-Weiterleitungen sind separat. Halten Sie eine bestehende Sitzung offen und stellen Sie die Konsolenwiederherstellung her, bevor Sie die Authentifizierung einschränken oder den SSH-Port ändern.

Überprüfen Sie die Identität des Servers, bevor Sie den ersten Schlüssel akzeptieren

Verwenden Sie einen bereits vertrauten Kanal, wie die Serverkonsole, um dessen Host-Key-Fingerabdruck zu erhalten. Führen Sie den ersten Befehl auf dem Server und den zweiten auf dem Client aus. Ersetzen Sie user und server.example durch die tatsächlichen Werte. Wenn Ed25519 nicht verfügbar ist oder durch Richtlinien nicht erlaubt wird, überprüfen Sie den vom Server tatsächlich verwendeten Host-Schlüssel.

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
ssh user@server.example

Vergleichen Sie die Client-Eingabeaufforderung mit dem vertrauenswürdigen SHA256-Fingerabdruck, bevor Sie ihn akzeptieren. Eine Warnung vor geändertem Host-Schlüssel erfordert eine Untersuchung: Sie kann auf eine legitime Neuinstallation folgen oder eine Abfangung anzeigen. Löschen Sie nicht die gesamte known_hosts-Datei und deaktivieren Sie die Überprüfung nicht, um die Warnung zu beseitigen. Aktualisieren Sie nur den relevanten Eintrag, nachdem Sie einen legitimen Austausch bestätigt haben.

Erstellen Sie ein Schlüsselpaar und installieren Sie nur den öffentlichen Schlüssel.

ssh-keygen -t ed25519 -f ~/.ssh/linux-course-key
ssh-copy-id -i ~/.ssh/linux-course-key.pub user@server.example
ssh -i ~/.ssh/linux-course-key user@server.example

Wenn die Schlüsselerstellung verlangt, eine vorhandene Datei zu überschreiben, stoppen Sie und wählen Sie einen anderen Dateinamen. Schützen Sie den privaten Schlüssel mit einer Passphrase und bewahren Sie ihn auf dem Client auf; installieren Sie nur den .pub-Schlüssel auf dem Server. Wenn ssh-copy-id nicht verfügbar ist, fügen Sie die öffentliche Schlüsselzeile durch eine genehmigte Methode zu ~/.ssh/authorized_keys des Kontos hinzu. Gängige Berechtigungen sind 700 für .ssh und 600 für authorized_keys, mit korrektem Besitz.

Testen Sie von einem neuen Terminal aus. Das Angeben eines Schlüsselpfads beweist für sich genommen nicht, dass der Schlüssel verwendet wurde; der Agent oder die Passwortalternative kann stattdessen authentifizieren. Prüfen Sie bei Bedarf die Ausgabe von ssh -v -o IdentitiesOnly=yes -i ... auf die erfolgreiche Methode. Wählen Sie in Umgebungen mit spezifischen kryptografischen oder FIPS-Richtlinien einen genehmigten unterstützten Schlüsseltyp.

Senden und empfangen Sie eine kleine Datei mit scp

printf "SSH transfer test\n" > transfer-test.txt
scp -i ~/.ssh/linux-course-key transfer-test.txt user@server.example:~/transfer-test.txt
scp -i ~/.ssh/linux-course-key user@server.example:~/transfer-test.txt ./transfer-returned.txt
cmp transfer-test.txt transfer-returned.txt

Führen Sie dieses Beispiel auf dem Client mit einem Laborkonto aus, nachdem Sie bestätigt haben, dass der entfernte Dateiname nicht verwendet wird: scp kann ihn überschreiben. Wenn cmp mit Status 0 und ohne Ausgabe beendet wird, stimmt die zurückgegebene Datei überein. Neuere OpenSSH scp-Versionen verwenden standardmäßig SFTP; prüfen Sie die Kompatibilität mit älteren Servern, anstatt das Verhalten von altem SCP anzunehmen.

Verwenden Sie interaktives sftp und benutzerdefinierte Ports

sftp -i ~/.ssh/linux-course-key user@server.example

Geben Sie die folgenden Befehle an der sftp-Eingabeaufforderung ein. pwd und ls beziehen sich auf die entfernte Seite; lpwd und lls beziehen sich auf die lokale Seite. Überprüfen Sie beide Orte vor dem Hoch- oder Herunterladen.

pwd
lpwd
ls
put transfer-test.txt
get transfer-test.txt transfer-sftp.txt
bye

Für Port 2222 verwendet SSH -p 2222, während SCP und SFTP -P 2222 verwenden. Untersuchen Sie den Listener und die Richtlinie für Verbindungsverweigerungen sowie Benutzername, Schlüssel und Berechtigungen bei Authentifizierungsfehlern. Detaillierte Protokolle können Adressen und Kontopfade offenlegen, daher sollten diese vor dem Teilen geschwärzt werden. Entfernen Sie nur die Labor-Dateien und die Registrierung von öffentlichen Schlüsseln, die Sie nicht mehr benötigen.

Offizielle Referenzen