Wie man SSHFS unter Linux installiert und benutzt
SSHFS (SSH File System) ist eine Implementierung eines Dateisystems im Userspace (FUSE), das es Clients ermöglicht, entfernte Dateisysteme über eine SSH-Verbindung einzuhängen. Das SSHFS Dateisystem verwendet das SSH File Transfer Protocol (SFTP), um das entfernte Dateisystem auf dem Client-Rechner zu mounten, und die Verbindungen zwischen Client und Server sind sicher und verschlüsselt.
SSHFS kann als Alternative zum traditionellen FTP-Protokoll verwendet werden. Es ist standardmäßig über eine SSH-Verbindung sicher und es werden keine zusätzlichen Pakete oder Konfigurationen benötigt und es funktioniert mit einer einfachen SSH-Standardkonfiguration.
In dieser Anleitung lernst du, wie du mit SSHFS ein entferntes Verzeichnis auf sichere Weise zwischen zwei Linux-Rechnern (Client und Server) einbinden kannst. In dieser Anleitung erfährst du auch, wie du chroot auf SSHFS einrichtest, um zu verhindern, dass Benutzer auf die Verzeichnisse anderer Benutzer zugreifen.
Voraussetzungen
Um diesen Leitfaden zu lesen, brauchst du zwei Linux-Rechner, einen Client und einen Server. Du kannst jede beliebige Linux-Distribution verwenden und stellst sicher, dass auf dem Server ein OpenSSH-Server installiert ist und du einen Nicht-Root-Benutzer mit den sudo-Root-Rechten hast.
Installation von SSHFS auf deinem lokalen Computer
Standardmäßig sind SSHFS-Pakete auf den meisten Linux-Distributionen verfügbar, darunter Debian/Ubuntu, RHEL/CentOS/Rocky und ArchLinux/Manjaro. Du kannst es ganz einfach mit deinem Systempaketmanager installieren. In diesem Abschnitt installierst du SSHFS auf deinem lokalen/Client-Rechner.
Aktualisiere zunächst deine Paketindexliste, indem du den folgenden Befehl ausführst.
# For Debian/Ubuntu sudo apt update
# For RHEL/CentOS/RockyLinux
sudo dnf check-update
# For ArchLinux/Manjaro
sudo pacman -Syu
Nachdem dein Paketindex aktualisiert wurde, installierst du das SSHFS-Paket mit deinem Paketmanager wie unten beschrieben. Bei Debian- und Archlinux-Distributionen heißt das Paket„sshfs„, aber bei RHEL-Distributionen heißt das Paket„fuse-sshfs„.
# For Debian/Ubuntu sudo apt install sshfs
# For RHEL/CentOS/RockyLinux
sudo dnf install fuse-sshfs
# For ArchLinux/Manjaro
sudo pacman -S sshfs
Jetzt hast du die Installation des SSHFS-Pakets auf deinem lokalen Rechner abgeschlossen. Als Nächstes lernst du die grundlegenden Befehle, um entfernte Verzeichnisse/Partitionen auf deinem lokalen Rechner mit dem SSHFS-Befehl ein- und auszuhängen.
Grundlagen: Einhängen und Aushängen mit SSHFS
Bevor du mit dem SSHFS-Befehl beginnst, musst du sicherstellen, dass du einen Linux-Server hast, auf dem OpenSSH installiert und aktiviert ist. Für die Benutzerauthentifizierung am Server kannst du die SSH-Passwort-basierte Authentifizierung oder die SSH-Schlüssel-basierte Authentifizierung verwenden. Die SSH-Schlüsselauthentifizierung ist jedoch sicherer als die Passwortauthentifizierung.
In diesem Abschnitt lernst du den grundlegenden Befehl „sshfs“ kennen, mit dem du ein entferntes Verzeichnis bzw. eine entfernte Partition vom Server auf den lokalen bzw. Client-Rechner mounten kannst. Außerdem lernst du, wie du sshfs von deinem lokalen Rechner aus wieder aushängen kannst.
1. Der grundlegende Befehl von„sshfs“ zum Mounten eines Verzeichnisses auf dem lokalen Rechner über das SSH-Protokoll lautet wie folgt.
sshfs user@server-ip:/remote/directory /local/directory
In der Praxis sollst du das entfernte Verzeichnis„/srv/data“ vom Server„172.16.1.10“ in das Verzeichnis„~/data“ auf dem lokalen Rechner einhängen. In diesem Beispiel wird der SSH-Benutzer „johndoe“ verwendet.
sshfs johndoe@172.16.1.10:/srv/data ~/data
Jetzt wirst du zur Passwortauthentifizierung aufgefordert, wenn du die passwortbasierte Authentifizierung für dein SSH verwendest.
Um das zu überprüfen, rufe den Befehl „ls“ im Verzeichnis„~/data“ auf dem lokalen Rechner auf.
ls -lah ~/data
Du siehst dann eine Liste der Dateien des Fernservers auf deinem lokalen Rechner.
2. Um das entfernte Verzeichnis von deinem lokalen Rechner aus wieder einzuhängen, führe den Befehl„fusermount“ aus (siehe unten). Dieser Befehl wird zum Ein- und Aushängen von FUSE-Dateisystemen verwendet.
fusermount -u ~/data
3. Ein weiteres Beispiel für den Befehl„sshfs„, das dich vielleicht interessiert.
Der Befehl „sshfs“ mit der Debugging-Option„-d„. Wenn du mit dem ’sshfs‘-Befehl Probleme bekommst, kannst du mit der zusätzlichen Option ‚-d‘ alle Debug-Meldungen anzeigen lassen, wenn du eine Verbindung zum Server herstellst.
sshfs user@server-ip:/remote/directory /local/directory -d
Wenn du einen Server mit einem nicht standardmäßigen SSH-Port betreibst, kannst du die Option „-p“ gefolgt von deinem SSH-Port hinzufügen.
sshfs user@server-ip:/remote/directory /local/directory -C -p 2222
Mit der Option „-C“ wird die Komprimierung aktiviert, was der Option „-ocompression=yes“ im ssh-Befehl entspricht.
Für eine vollständige Referenz kannst du die Option ‚–help‘ verwenden oder die SSHFS-Manpage nutzen.
sshfs --help man sshfs
Einrichten von Chroot auf SSHFS
In diesem Abschnitt erfährst du, wie du chroot auf SSHFS aktivierst, indem du den SSH-Server konfigurierst und den Benutzer und das Verzeichnis angibst. Die chroot-Umgebung schränkt den Zugriff auf das Verzeichnis ein, aber dein Benutzer kann immer noch auf dem Mount-Verzeichnis lesen und schreiben.
1. Zuerst erstellst du ein neues chroot-Verzeichnis für deinen Benutzer und erlaubst ihm den Lese- und Schreibzugriff. In dieser Anleitung legst du ein neues gemeinsames Verzeichnis „/srv/shared“ an und erstellst dann für jeden Benutzer ein neues Home-Verzeichnis und ein Datenverzeichnis.
Führe den folgenden Befehl aus, um ein neues gemeinsames Hauptverzeichnis „/srv/shared“ zu erstellen und den Eigentümer auf den Benutzer und die Gruppe„root“ zu ändern.
mkdir -p /srv/shared sudo chown -R root:root /srv/shared
2. Erstelle nun für jeden Benutzer ein weiteres Verzeichnis unter dem Verzeichnis „/srv/shared“. Achte darauf, dass der Benutzer und die Gruppe„root“ Eigentümer dieses Verzeichnisses werden.
mkdir -p /srv/shared/johndoe sudo chown -R root:root /srv/shared/johndoe
3. Als Nächstes erstellst du das Verzeichnis„data“ im Home-Verzeichnis des Benutzers„/srv/shared/johndoe„. Dann änderst du die Eigentumsrechte an diesem Verzeichnis auf den Benutzer„root“ und die Gruppe„johndoe„. Schließlich erlaubst du der Gruppe„johndoe„, das Verzeichnis zu lesen und zu schreiben.
mkdir -p /srv/shared/johndoe/data sudo chown -R root:johndoe /srv/shared/johndoe/data sudo chmod g+rwx /srv/shared/johndoe/data
Jetzt kannst du das Remote-Verzeichnis„/data“ mounten, aber es entspricht dem Verzeichnis„/srv/shared/johndoe/data“ auf dem Server.
4. Nachdem du das chroot-Verzeichnis für deinen Benutzer erstellt hast, musst du die SSH-Konfiguration „/etc/ssh/sshd_config“ bearbeiten. Bearbeite sie mit nano oder deinem bevorzugten Texteditor.
sudo nano /etc/ssh/sshd_config
Füge die folgenden Zeilen in die Datei ein.
Subsystem sftp internal-sftp Match User johndoe ChrootDirectory /srv/shared/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no
Die Konfiguration „internal-sftp“ ermöglicht es SSH, auch als SFTP-Server zu fungieren. Dann definiere das„ChrootDirectory“ für den Benutzer„johndoe“ auf das Verzeichnis„/srv/shared/%u„. Das„%u“ steht für den Benutzernamen.
Speichere und schließe die Datei.
5. Führe als Nächstes den folgenden Befehl aus, um die SSH-Konfiguration zu überprüfen und stelle sicher, dass du keine Syntaxfehler bekommst. Starte dann den SSH-Dienst neu, um die neue Konfiguration zu übernehmen.
sudo sshd -t sudo systemctl restart sshd
6. Gehe nun zurück zum lokalen Rechner und hänge das Remote-Verzeichnis in die Chroot-Umgebung ein. Du solltest das Verzeichnis „/data“ anstelle des vollständigen Pfadverzeichnisses „/srv/shared/johndoe/data“ verwenden. Außerdem hast du die Berechtigung zum Lesen, Schreiben und Ausführen im Verzeichnis „data“.
sshfs user@server-ip:/data ~/data
Um den Schreibzugriff zu überprüfen, erstellst du mit dem folgenden Befehl eine neue Datei auf deinem Client-Rechner.
cd ~/data echo "This file from client machine" >> another-file.md
Gehe nun zurück zum Server, navigiere zum Verzeichnis„/srv/shared/johndoe/data“ und überprüfe die verfügbare Datei in diesem Verzeichnis.
cd /srv/shared/johndoe/data/ ls
cat another-file.md
Dort siehst du die Datei, die du gerade auf dem Client-Rechner erstellt hast.
In diesem Abschnitt hast du das Chroot-Verzeichnis für SSHFS-Benutzer erstellt und den SSH-Dienst so konfiguriert, dass er Chroot aktiviert.
Fehlersuche
Wenn du bei der SSHFS-Verbindung einen Fehler erhältst, kannst du deine Verbindung auf folgende Weise untersuchen.
Du kannst den Debug-Modus mit der Option‚-d‘ verwenden. Mit dieser Option siehst du die Protokolle deiner Verbindung in deinem Shell-Terminal.
Führe den Befehl„sshfs“ wie unten beschrieben im Debug-Modus aus.
sshfs user@server-ip:/data ~/mnt -d
Du kannst auch versuchen, das SSH-Protokoll auf deinem Server zu überprüfen. Bevor du den Befehl „sshfs“ verwendest, öffne ein neues Terminal, verbinde dich mit deinem Server und führe dann den Befehl„tail“ aus, um den SSH-Log-Dienst zu überprüfen.
Auf Ubuntu/Debian-basierten Systemen ist das SSH-Protokoll unter„/var/log/auth.log“ verfügbar. Bei RHEL/CentOS-basierten Systemen ist das SSH-Protokoll unter„/var/log/secure“ zu finden.
# For Ubuntu/Debian tail -f /var/log/auth.log
# For RHEL/CentOS
tail -f /var/log/secure
Fazit
Herzlichen Glückwunsch! Du hast jetzt gelernt, wie du SSHFS verwendest, um ein entferntes Verzeichnis vom Server auf deinem lokalen Rechner einzuhängen. Außerdem hast du gelernt, wie du eine chroot-Umgebung auf SSHFS einrichtest und wie du Fehler in deiner SSHFS-Verbindung behebst.