Linux Kung Fu: Bequeme Dateiverwaltung über SSH

Wenn Sie mehr als einen Linux-Computer haben, verwenden Sie ihn wahrscheinlich ständig ssh. Es ist ein großartiges Werkzeug, aber ein Detail schien mir immer seltsam. Trotz der Tatsache, dass SSH-Verbindungen das Übertragen von Dateien mit scpund ermöglichen sftp, können wir keine Dateien zwischen dem lokalen und dem Remote-System verschieben, ohne das Programm auf dem lokalen Host auszuführen oder ohne von der Remote-Verbindung aus eine Verbindung zum lokalen Computer herzustellen.







Letzteres ist ein echtes Problem, da Server häufig hinter einer Firewall oder hinter einem NAT-Router verbunden sind, dh ohne eine permanente IP-Adresse. Infolgedessen kann der Server in keinem Fall eine Verbindung zu dem lokalen System herstellen, von dem aus zuvor auf ihn zugegriffen wurde. Wenn Sie in einer SSH-Sitzung einfach eine lokale oder entfernte Datei nehmen und an den gewünschten Ort übertragen könnten, wäre dies sehr praktisch.



Eigentlich habe ich dieses Ziel nicht ganz erreicht, aber ich bin dem Erreichen sehr nahe gekommen. In diesem Artikel werde ich Ihnen ein Skript erläutern, mit dem Sie Remote-Verzeichnisse auf Ihrem lokalen Computer bereitstellen können. Auf dem lokalen Computer müssen Sie installierensshfsAn einem entfernten Ort, an dem Sie möglicherweise keine Programme installieren können, müssen Sie nichts ändern. Wenn Sie einige Zeit mit dem Einrichten von Systemen verbringen und auf dem Clientcomputer ein funktionierender SSH-Server vorhanden ist, können Sie auch lokale Verzeichnisse auf Remote-Systemen bereitstellen. Sie müssen sich keine Gedanken über das Blockieren von IP-Adressen oder Ports machen. Wenn Sie in der Lage sind, eine Verbindung zu einem Remotecomputer herzustellen, bedeutet dies, dass Ihnen das gelingt, worüber ich Ihnen erzählen möchte.



Wenn all dies kombiniert wird, stellt sich heraus, dass ich dem Ziel sehr nahe bin. Ich kann mit einer Befehlsshell auf dem Client oder auf dem Server arbeiten und Dateien auf beiden Seiten der Verbindung bequem lesen und schreiben. Dazu müssen Sie nur alles richtig konfigurieren.



Gibt es hier einen Haken?



Vielleicht entscheiden Sie, dass es eine Art Fang gibt. Schließlich handelt es sich tatsächlich um die Verwendung von zwei SSH-Verbindungen. Einer dient zum Mounten des Dateisystems und der andere zum Anmelden am Computer. Und das ist tatsächlich der Fall. Bei korrekter Konfiguration sshmuss die Authentifizierung jedoch nur einmal durchgeführt werden, ohne zu viel Zeit für die Organisation von zwei Verbindungen aufzuwenden.



Darüber hinaus wird die Arbeit durch das Skript, über das ich sprechen werde, erheblich erleichtert. Es verbirgt die Details vor dem Benutzer, so dass der Verbindungsvorgang (fast) wie gewohnt aussieht und danach alles so funktioniert, wie es sollte.



Ein paar Worte zu sshfs



Mit dem Dienstprogramm sshfskönnen Sie mit dem Dateisystem im Benutzerbereich (Dateisystem im Benutzerbereich, FUSE) arbeiten. Das heißt, wir sprechen über die Tatsache, dass sich eine Ebene im Benutzerbereich über dem Basisdateisystem befindet. In diesem Fall ist ein solches Dateisystem der unterstützte SSH-Server sftp. Auf diese Weise können Sie mit Dateien arbeiten, die sich auf einem Remote-System befinden, und sie so behandeln, als wären sie in einem realen Dateisystem auf dem lokalen Computer. Wenn Sie es noch nicht ausprobiert haben sshfs, versuchen Sie es. Dieses Dienstprogramm funktioniert sehr gut.



Angenommen, Sie sind an Ihrem Computer angemeldet myserverund führen den folgenden Befehl von Ihrem lokalen Computer aus: 



sshfs myserver:/home/admin ~/mounts/myserver


Dadurch wird das Verzeichnis des Remotecomputers /home/adminauf dem lokalen System entlang des Pfads zugänglich ~/mounts/myserver.



Bei der Verwendung können sshfsSie verschiedene Optionen verwenden. Sie können beispielsweise festlegen, dass die Verbindung nach dem Verbindungsverlust wieder hergestellt wird. Einzelheiten finden sshfsSie in der Hilfe.



Da sshfseine remote gemountete Version der Datei verwendet wird, werden alle an der Datei vorgenommenen Änderungen auf dem Remotecomputer gespeichert. Und nachdem die sshfs-Verbindung geschlossen wurde, verbleibt nichts auf dem lokalen Computer. Wir werden das jetzt beheben.



Vorbereitende Vorbereitung



Bevor ich zur Beschreibung des oben genannten Skripts übergehe, möchte ich einige der Clienteinstellungen erläutern, die Sie, wenn Sie möchten, selbst ändern können. Hier erstelle ich ein Verzeichnis ~/remoteund darin Unterverzeichnisse für jeden Remotecomputer. Zum Beispiel - es können Verzeichnisse ~/remote/fileserverund sein ~/remote/lab.



Das Skript wird aufgerufen sshmount. Es werden die gleichen Argumente wie verwendet ssh. Um die Arbeit mit dem Skript zu vereinfachen, sollten die Informationen zum Remote-Host in einer Datei gespeichert werden ~/.ssh/config, die die Verwendung einfacher und kurzer Hostnamen ermöglicht. Beispielsweise labkönnten Computerinformationen folgendermaßen aussehen:



Host lab
Hostname lab.wd5gnr-dyn.net
Port 444
User alw
ForwardX11 yes
ForwardX11Trusted yes
TCPKeepAlive yes
Compression yes
ControlMaster auto
ControlPath ~/.ssh/master-%r@%h:%p


Dies ist nicht wirklich notwendig, aber mit diesem Ansatz steht Ihnen ein gut aussehendes Verzeichnis zur Verfügung ~/remote/lab, kein komplexes Ansichtskonstrukt ~/remote/alw@lab.wd5gnr-dyn.net:444. An all diesen Parametern ist nichts Geheimnisvolles. Das einzige , was ich möchte Ihre Aufmerksamkeit auf das lenken ControlMasterund ControlPathermöglichen es Ihnen , schneller mit Verbindungen zu organisieren auszuführen , die in diesem Fall, ist sehr wichtig.



Darüber hinaus können Sie mithilfe privater SSH-Schlüssel eine automatische Verbindung zu einem Remote-System herstellen. Hier ist das Zeug dazu.



Skript



Unser Skript kann auf zwei Arten verwendet werden. Wenn der Aufruf über einen Link zu erfolgt sshunmount, wird das dem angegebenen Remote-Host zugeordnete Dateisystem aufgehoben. Wenn es anders aufgerufen wird (normalerweise wie sshmount), führt es die folgenden drei Aktionen aus:



  1. Es wird geprüft, ob das Verzeichnis ein ~/remoteUnterverzeichnis mit demselben Namen wie der Hostname enthält (z. B. - lab). Wenn es kein solches Verzeichnis gibt, wird eine Fehlermeldung angezeigt und die Arbeit fortgesetzt.
  2. Wenn ein solches Verzeichnis vorhanden ist, überprüft das Skript die Liste der bereitgestellten Dateisysteme, falls das erforderliche Dateisystem bereits bereitgestellt ist. Wenn ja, arbeitet er weiter.
  3. Wenn das Verzeichnis nicht bereitgestellt ist, wird es aufgerufen sshfsund fortgesetzt.


Dieses Skript finden Sie auf GitHub . Und hier ist der Code, aus dem einige Kommentare entfernt wurden:



#!/bin/bash
 
if [ "$1" == "" ]
then
echo Usage: sshmount host [ssh_options] - Mount remote home folder on ~/remote/host and log in
echo or: sshunmount host - Remove mount from ~/remote/host
exit 1
fi
 
#    sshunmount...
if [ $(basename "$0") == sshunmount ]
then
echo Unmounting... 1>&2
fusermount -u "$HOME/remote/$1"
exit $?
fi
 
#  ...
if [ -d "$HOME/remote/$1" ] #   ?
then
if mount | grep "$HOME/remote/$1 " #    ?
then
echo Already mounted 1>&2
else
sshfs -o reconnect $1: $HOME/remote/$1 # mount
fi
else
echo No remote directory ~/remote/$1 exists 1>&2
fi
ssh $@ #  


Dieses Skript gibt mir die Hälfte von dem, was ich brauche. Auf diese Weise können Sie bequem mit Remote-Dateien auf dem lokalen Computer arbeiten, mit dem ich verbunden bin. Es ist jedoch etwas schwieriger, von einem Remotecomputer aus mit Dateien auf dem lokalen Computer zu arbeiten.



Lösung des inversen Problems



Wenn Sie mit dem Mounten von Ordnern auf Ihrem lokalen Computer auf einem Server experimentieren möchten, muss auf dem lokalen Computer ein SSH-Server ausgeführt werden. Wenn Ihr lokaler Computer für den Server sichtbar und zugänglich ist, ist dies natürlich ganz einfach: Führen Sie ihn einfach auf dem Remotecomputer aus sshfsund hängen Sie den Ordner vom lokalen Computer aus darauf ein. In vielen Fällen haben wir jedoch keinen Zugriff auf das lokale System, das sich möglicherweise hinter Firewalls oder Routern befindet. Dies gilt insbesondere dann, wenn die Rolle eines lokalen Systems von einem Laptop übernommen wird, der von verschiedenen Orten aus eine Verbindung zum Netzwerk herstellen kann.



Trotz all dieser Schwierigkeiten kann unsere Aufgabe immer noch gelöst werden. Die Lösung besteht aus zwei Teilen.



Erstens - es ist notwendig, wenn Sie anrufensshmountGeben Sie ein zusätzliches Argument an (die Datei kann bearbeitet werden, falls Sie ständig einen ähnlichen Befehl ausführen müssen):



sshmount MyServer -R 5555:localhost:22


Zweitens müssen Sie nach dem Herstellen einer Verbindung zum Host den folgenden Befehl ausführen:



sshfs -p 5555 localhost:/home/me ~/local


Dank der Option -Rwird auf dem Remote-Computer ein Socket am Port erstellt 5555(der natürlich frei sein sollte) und die Verbindung mit dem Port des 22lokalen Computers hergestellt. Angenommen, der SSH-Server wird auf dem Port ausgeführt 22, kann der Server über dieselbe Verbindung eine Verbindung zum lokalen Computer herstellen. Es muss nicht unsere IP-Adresse kennen oder einen offenen Port haben.



Der Befehl sshfs, der beim Systemstart ausgeführt werden kann, verknüpft das lokale Verzeichnis /home/memit dem Verzeichnis auf dem ~/localRemote-Server. Wenn Sie zusätzlich lokal angemeldet sind, können Sie sich die Umgebungsvariablen ansehen, die mit beginnen, SSH_und mehr über die SSH-Verbindung erfahren. Dies sind beispielsweise Variablen $SSH_CLIENTund $SSH_TTY.



Damit die oben genannten Befehle für Sie funktionieren, müssen Sie natürlich die Hostnamen und Verzeichnisse sowie die Portadressen in die in Ihren Systemen verwendeten ändern. Nachdem alles konfiguriert ist, sind alle benötigten Dateien sowohl auf lokalen als auch auf Remote-Computern verfügbar. Ich habe übrigens nicht versucht, die kreisförmige Montage von Verzeichnissen zu organisieren. Wenn Sie dies versuchen, kann sich etwas sehr Seltsames herausstellen.



Ergebnis



Ich nehme an, Sie müssen vorsichtig sein, wenn Sie Remoteordner auf dem lokalen Computer und lokale Ordner auf dem Remotecomputer gleichzeitig bereitstellen. Beispielsweise können Dienstprogramme, die das gesamte Dateisystem scannen, in solchen Konfigurationen verwirrt werden. Außerdem suche ich noch nach einer Antwort auf die Frage, wie beim Beenden der letzten Sitzung die Verbindung zum Server-Dateisystem ordnungsgemäß getrennt werden kann.



Aber auch jetzt gibt uns dies gute Werkzeuge, um bequemes und zuverlässiges Arbeiten mit Softwaredateien zu organisieren ssh. Es sollte beachtet werden, dass eine andere Option zur Lösung des Problems der Arbeit mit Dateien auf Remote-Systemen darin bestehen kann, Ordner zu synchronisieren und sie zum Übertragen von Dateien zwischen Computern zu verwenden.



Womit arbeiten Sie mit Dateien auf Remote-Linux-Systemen?










All Articles