Ich habe eine Reihe von Software-Dateien in mein Unterverzeichnis ~/Downloads
auf meinem PC heruntergeladen . Ich verwende auch Bash, um eine Remoteverbindung mit einem Computer herzustellen ssh
.
Ist es möglich, diese Datei ssh
auf den Remote-Computer zu übertragen?
this file
) und mehrere Dateien (a series of software files
). Die beste Lösung hängt davon ab, ob Sie eine einzelne Datei oder mehrere Dateien haben.Antworten:
Möglicherweise möchten Sie
scp
für diesen Zweck verwenden. Es ist ein sicheres Mittel, um Dateien mit dem SSH-Protokoll zu übertragen.Verwenden Sie zum Kopieren einer Datei mit dem Namen
yourfile.txt
von~/Downloads
auf einen Remotecomputer beispielsweise Folgendes:Weitere Beispiele finden Sie hier .
quelle
rsync
kann auch funktionieren, jetzt, wo ich darüber nachdenkescp
oben mitrsync
und es sollte gut funktionieren.rsync
für alles, auch einzelne Dateien, zu verwenden, weil es in den einfachen Fällen "nur funktioniert" und in anderen Fällen weitaus effizienter sein kann. Bei der Verwendung von entwederscp
oderrsync
auf irgendetwas nicht bereits komprimiert und / oder verschlüsselt, erinnern die Option compression auf (drehen-C
fürscp
,-z
oder--compress
fürrsync
). Tatsächlich schalte ich es aus Gewohnheit ein - es kommt sehr selten vor, dass es Dinge verlangsamt (vielleicht, wenn Sie ein langsames Gerät mit niedrigem Stromverbrauch und begrenzter CPI-Leistung wie ein RPI verwenden).Obwohl dies
scp
eindeutig das richtige Tool ist, können Sie, wenn Sie es aus irgendeinem Grund nicht verwenden können, Folgendes von Ihrem lokalen Computer ausführen, um beispielsweise eine Verzeichnisstruktur auf den Remote-Computer zu kopieren:Dies wird
tar
das aktuelle Verzeichnis auf dem lokalen Computer und dasjenige schreiben,tar
instdout
das dann zu einemssh
Befehl weitergeleitet wird, wo er einen Fernbefehl ausführt, um die Datei zu entpacken, aus der er lieststdin
Bearbeitet, um den Kommentar von Dietrich Epp zu reflektieren
-f -
, dass er sowohl auf der Erstellungs- als auch auf der Extraktionsseite der Standard ist, sodass keine explizite Angabe erforderlich ist.quelle
-C basedir
Argument hinzufügentar
, um etwas anderes als Ihr Ausgangsverzeichnis zu extrahieren.Wenn Sie dies öfter als nur selten tun möchten, empfehlen
sshfs
wir Ihnen, das Remote-Dateisystem mit einem Unix-ähnlichen Betriebssystem zu mounten, das FUSE unterstützt (Linux, * BSD, Mac OS X). Erstellen Sie ein Verzeichnis unter Ihrem Home-Verzeichnis mit dem Namen ~ / remote-server:Dann mounten Sie das entfernte Dateisystem mit
sshfs
. Ersetzen Sie "yourserver.com" durch den Hostnamen Ihres Remote-Computers und "Name des Remote-Verzeichnisses" durch das Verzeichnis, das Sie auf dem Remote-System verwenden.Sobald dies erledigt ist, ist das Remote-Verzeichnis Teil Ihres Dateisystems und Sie können alle Ihre normalen Tools darauf verwenden, einschließlich
cp
:Wenn Sie es noch nicht
sshfs
installiert haben, sollten Sie es mit Ihrem Paket-Manager auf Ihrem Computer installieren können (suchen Sie nach Paketen mit dem Namensshfs
oderfuse-sshfs
). Weitere Informationen finden Sie in einem Online-Lernprogramm .Dies ist übrigens meine bevorzugte Methode zum Verwalten von Dateien auf Remoteservern. Normalerweise habe ich einen Produktionsserver und zwei Entwicklungsserver auf diese Weise gemountet und verwende damit meinen normalen Workflow zum Durchsuchen von Dateien.
quelle
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
und-C
zur Komprimierung bei geringer Bandbreite. Sobald es funktioniert, füge ich persönlich Aliase für die Befehle hinzu, um die entfernten Dateisysteme schnell über ssh bereitzustellen. @Benjamin_Staton Ich würde hier weder sudo noch root verwenden, zumindest nicht ohne eine ordnungsgemäße Benutzer- / Gruppenzuordnung.Beim ersten Mal gibt es keinen wirklichen Unterschied zwischen
scp
(copy overssh
) undrsync
.Nachfolgende Läufe profitieren davon, dass rsync keine bereits vorhandenen Dateien kopiert.
-a
für alle Dateien-v
für wortreich-H
für "Symlinks einfach herausfinden und das Richtige tun"Andere nützliche Flags sind:
--delete
um Dateien im Ziel zu löschen, die in der Quelle nicht mehr vorhanden sind.--dry-run
zum Testen - sehr praktisch in Kombination mit--delete
.Hiermit können Sie sich auch mit
ssh
Schlüsseln ohne Passwort anmelden, sofern Sie diese eingerichtet haben.Zeigen Sie am Ende des Laufs an,
rsync
wie viel schneller es war, die einfache Kopie erneut auszuführen .quelle
-H
Wenn es sich um harte Links handelt, wird verhindert, dass derselbe Inhalt zweimal oder öfter gesendet wird, wenn er an mehr als einer Stelle in der Quellverzeichnisstruktur verknüpft ist (dies kann den Prozess jedoch für große Verzeichnisstrukturen weniger effizient machen). Dies hat keine Auswirkung auf symbolische Links, aber einige der von-a
/--archive
enthaltenen Optionen wirken sich auf die Verarbeitung von Symlinks aus.Zu den obigen Antworten hinzufügen. Manchmal bin ich mir über den Fernpfad nicht ganz sicher. In diesen Fällen
sftp
navigiere ich zuerst zum gewünschten Speicherort und verwende dann get oder put, um eine Datei tatsächlich herunterzuladen oder hochzuladen.Wenn Sie auch etwas immer synchron halten und sogar eine Datei lokal ausführen möchten, die sich auf einem Remotecomputer befindet,
sshfs
funktioniert dies hervorragend.quelle
Ich mache etwas sehr ähnliches mit ssh. Ich habe ein benutzerdefiniertes Build-Tool für Visual Studio erstellt und VS hat im Grunde einen ssh-Befehl ausgeführt, der meinen Code auf einen Zielcomputer kopiert und ihn dann auf diesem Zielcomputer kompiliert.
Beachten Sie die Verwendung von einfachen Anführungszeichen und Semikolon. Ersteres kapselt Ihre Befehle an HostB über SSH und letzteres ermöglicht es Ihnen, mehrere HostB-Systembefehle in einem SSH-Befehl von HostA aus auszuführen.
Damit dies funktioniert, müssen Sie ssh-Schlüssel auf Ihrem Startcomputer einrichten, damit Sie BenutzerA @ HostA sein und sich bei HostB als BenutzerB anmelden können. Der Vorgang zum Erstellen eines öffentlichen SSH-Schlüssels für userA @ hostA ist gut dokumentiert. Wenn Sie auf hostA keinen öffentlichen Schlüssel für userA erstellen und diesen Schlüssel als userB auf hostB kopieren, müssen Sie jedes Mal Ihr Kennwort eingeben - was die Freude an der Automatisierung beeinträchtigt.
quelle