it-swarm.com.de

Laden Sie eine Datei über eine aktive SSH-Sitzung herunter

Ich möchte eine Datei von einer aktiven SSH-Sitzung herunterladen. In vielen Fällen verwende ich wahrscheinlich könnte nur SFTP, scp, rsync usw., aber es gibt Zeiten, in denen ich erhöhte Berechtigungen auf dem Remote-Server habe, so dass ich diese nicht verwenden kann Methoden.

Wenn Sie Schwierigkeiten haben zu verstehen, was ich meine, stellen Sie sich vor, Sie wollten etwas von /root/ oder /var/log/auth.log herunterladen. Root Login ist deaktiviert (da wir keine Idioten sind). Wie bekommen Sie diese Datei? Kopieren Sie es an einen weniger geschützten Ort und verschieben Sie es dann? Das ist klobig. Es gibt auch Szenarien, in denen der Remote-Pfad komplex oder temporär ist oder nicht einmal ein Pfad, weil die Ausgabe eines Remote-Befehls lokal gespeichert werden soll. Aus der Ferne speichern, dann kopieren? Clunk!

Es gibt mehrere umständliche Möglichkeiten, um Versionen davon zu erhalten, aber in einer idealen Welt hätte ich einen ähnlichen lokalen Schreibzugriff vom Remoteserver aus, wobei ich die vorhandene SSH-Sitzung als Conduit verwende. So etwas wie (das ist nur ein künstlerischer Eindruck):

[email protected]: cp /root/cheesecake /local/

Und es erscheint nur in meinem lokalen cwd. Und bidirektionaler Zugriff wäre keine schlechte Sache.


Es ist acht lange Jahre her, seit ich diese Frage gestellt habe und wir haben ein echtes Klirren gesehen, aber es bleibt ein Problem, mit dem ich gelegentlich immer noch zu kämpfen habe.

Ich habe die Frage in etwas viel Idealistischeres umgestaltet. Ich verstehe voll und ganz, dass es derzeit möglicherweise keine perfekte Antwort gibt. Alle bisherigen und zukünftigen Bemühungen um mein Ideal werden gewürdigt.

86
Oli

Möglicherweise möchten Sie zssh auschecken, das im Universum und daher mit verfügbar ist

Sudo apt-get install zssh

Sie benötigen es auf Ihrem Ubuntu-Server und auf Ihrem Client. Wenn Sie jedoch mit zssh angemeldet sind, drücken Sie einfach "Strg- @" und es wird der "Dateiübertragungsmodus" aufgerufen, mit dem Sie Dateien wieder über die Pipe an Ihren Server senden können Client-Computer oder laden Sie sie vom Client auf den Server hoch.

Sie müssen jedoch nicht erneut authentifizieren oder ein neues Fenster öffnen, um scp zu starten.

Wenn Sie ssh-Schlüssel und einen ssh-Agenten verwenden, können Sie ganz einfach Folgendes tun:

[enter]~[ctrl]-Z

Was wird Hintergrund ssh, und dann nur scp $!:/whatever/whatever .'

Sobald die Datei übertragen wurde, fg, um ssh zurückzugewinnen.

Wenn Sie keine ssh-Schlüssel verwenden, können Sie immer noch die Optionen "ControlMaster" und "ControlPath" verwenden, die den aktuellen OpenSSh-Versionen hinzugefügt wurden. Dies ist jedoch schwierig. Überprüfen Sie man ssh_config

34
SpamapS

Angenommen, Sie betreiben einen SSH-Server auf Ihrem Desktop (es gibt Möglichkeiten, dies zu umgehen, aber ich denke, sie alle erhöhen die Komplexität und haben möglicherweise Sicherheitsprobleme), dann können Sie einen umgekehrten SSH-Tunnel einrichten. Siehe SSH kopiert die Datei einfach auf das lokale System. über nix.SE .

  • Art Enter ~C Enter -R 22042:localhost:22 Enter Um eine umgekehrte Portweiterleitung von Ihrem Server zu Ihrem Desktop zu erstellen (22042 kann eine beliebige Portnummer zwischen 1024 und 65534 sein, die nicht verwendet wird).
  • Dann kopiert scp -P 22042 foo localhost: die Datei foo in Ihr aktuelles Verzeichnis auf dem Server zu Ihnen nach Hause auf dem Desktop.
  • Verschieben Sie nun die Datei in Ihr aktuelles Verzeichnis auf dem Desktop, indem Sie Folgendes eingeben Enter ~ Ctrl+Z mv ~/foo . Enter fg Enter.

Ssh-Escape-Sequenzen beginne mit ~; Die Tilde wird erst nach einem Zeilenumbruch erkannt. ~ Ctrl+Z stellt ssh in den Hintergrund. ~C gibt eine Befehlszeile ein, in der Sie eine Weiterleitung erstellen oder entfernen können.

24
Gilles

Ich habe einen Weg gefunden, dies mit Standard-ssh zu tun. Es ist ein Skript, das die aktuelle SSH-Verbindung dupliziert, Ihr Arbeitsverzeichnis auf dem Remote-Computer findet und die angegebene Datei auf den lokalen Computer zurückkopiert. Es werden 2 sehr kleine Skripte (1 remote, 1 local) und 2 Zeilen in Ihrer ssh-Konfiguration benötigt. Die Schritte sind wie folgt:

  1. Fügen Sie diese 2 Zeilen zu Ihrem ~/.ssh/config hinzu:

    ControlMaster auto
    ControlPath ~/.ssh/socket-%[email protected]%h:%p
    

    Wenn Sie nun eine SSH-Verbindung zu machineX haben, brauchen Sie keine Passwörter, um eine andere zu öffnen.

  2. Erstellen Sie auf dem Remotecomputer ein einzeiliges Skript mit dem Namen ~/.grabCat.sh.

    \#!/bin/bash<br>
    cat "$(pwdx $(pgrep -u $(whoami) bash) | grep -o '/.*' | tail -n 1)"/$1
    
  3. Erstellen Sie auf dem lokalen Computer ein Skript mit dem Namen ~/.grab.sh

    \#!/bin/bash
    [ -n "$3" ] && dir="$3" || dir="."
    ssh "$1" ".grabCat.sh $2" > "$dir/$2"
    
  4. und mache einen Alias ​​für grab.sh in (~/.bashrc oder wo auch immer):

    alias grab=~/.grab.sh
    

Das war's auch schon. Wenn Sie jetzt bei machineX:/some/directory angemeldet sind, starten Sie einfach ein neues Terminal und geben Sie Folgendes ein

grab machineX filename

Dadurch wird die Datei in Ihrem aktuellen Arbeitsverzeichnis auf dem lokalen Computer gespeichert. Sie können einen anderen Speicherort als drittes Argument für "grab" angeben.

Hinweis: Natürlich müssen beide Skripte "ausführbar" sein, dh chmod u+x filename.

10
user6702

Wenn Ihr Client-Computer (der Computer, auf dem Sie sitzen) als Computer A bezeichnet wird und der Computer, auf dem Sie sich gerade in SSH befinden, als Computer B bezeichnet wird, muss auf Ihrem lokalen Computer SSHD ausgeführt werden und Port 22 geöffnet sein. Dann:

scp myfile machineA:

Kopiert myfile auf MaschineB in mein MaschinenA-Ausgangsverzeichnis auf MaschineA. Dies setzt voraus, dass Benutzer-ID/Kennwort identisch sind.

scp myfile machineA:/newdir/newname

Kopiert myfile ein GerätB nach /newdir/newname auf GerätA. Dies setzt voraus, dass Benutzer-ID/Kennwort identisch sind.

scp MachineA:/path/to/my/otherfile . 

Ruft eine Kopie von otherfile aus meinem MachineA-Verzeichnis auf MachineA ab und legt sie in meinem aktuellen Arbeitsverzeichnis auf der MachineB-Maschine ab (standardmäßig unter UNIX durch das Zeichen "Punkt" (.) Gekennzeichnet). Dies setzt voraus, dass Benutzer-ID/Kennwort identisch sind.

Wenn die Benutzer-ID/das Kennwort nicht identisch sind, verwenden Sie:

scp myfile [email protected]:, um eine Datei abzurufen.

scp [email protected]:/path/to/my/otherfile . zum Ablegen von Dateien

ANMERKUNGEN zu SCP:

Genau wie der Befehl cp verfügt scp über die Option -p, um die Berechtigungseinstellungen der Originaldatei auf die Kopie zu übertragen (andernfalls wird die Kopie mit den normalen Einstellungen für neue Dateien erstellt). r Option zum Kopieren eines gesamten Verzeichnisbaums mit einem Befehl.

scp erstellt einen vollständig transparenten, verschlüsselten Datenkanal zwischen den beiden Computern, sodass Binärdaten (z. B. Bilder oder ausführbare Programme) korrekt beibehalten werden. Dies bedeutet auch, dass scp keine automatische Konvertierung der End-of-Line-Terminierung zwischen verschiedenen Arten von Betriebssystemen durchführen kann, wie dies mit ftp im "ASCII" -Modus möglich ist. Dies ist kein Problem beim Kopieren zwischen Unix-Systemen, die alle die gleiche End-of-Line-Konvention verwenden.

5
LukeInDC

Wenn Ihre Datei klein genug ist, können Sie sie mit base64 kodieren und dann lokal dekodieren:

 remote.example.net $ base64 <myfile 
  (kopiere die Ausgabe) 
 local.example.net $ base64 -d> myfile 
  (kopiere die Ausgabe) Ctrl+D

Ursprüngliche Antwort, woher ich diese habe (und ausprobierte): https://unix.stackexchange.com/a/2869/194134

2
wesalius

wenn Sie über ssh auf den Server zugreifen, können Sie auch über sftp eine Verbindung herstellen. Halten Sie den FileZilla-Client (GUI) griffbereit und fügen Sie den Pfad ein, auf dem Sie sich gerade befinden

enter image description here

2
jet

Es ist nicht über die aktive SSH-Verbindung, aber scp kopiert Dateien mit den gleichen Mechanismen und Berechtigungen wie ssh.

1
msw

Dies ist mit einer Standard-SSH-Sitzung nicht möglich, aber Sie können anstelle von SSH ein Skript verwenden, das so etwas wie einen einfachen FTP- oder RSH-Server auf Ihrem lokalen System startet und SSH mit den erforderlichen Optionen ausführt, um einen Tunnel zurück zu Ihrem Desktop einzurichten für die Verbindung zu diesem Server.

1
JanC

konsole verfügt über diese Funktion über das Menü "Bearbeiten-> ZModem-Upload", während Sie sich in einer Remote-Sitzung befinden (oder Strg-Alt-U).

Bitte beachten Sie: Paket lrzsz muss zuerst installiert werden. Für mich sieht es so aus, als ob es nur zum Hochladen von ASCII Dateien funktioniert.

1
jet

Da Sie eine Verbindung von einem Desktop aus herstellen, können Sie vermutlich ein zweites Terminal öffnen.

So mache ich oft:

  • ab dem ersten Terminal, auf dem die SSH-Sitzung ausgeführt wird, erhalte ich den vollständigen Pfad der Datei, die ich abrufen muss, entweder mit realpath myfile oder readlink -f myfile (ältere Ubuntu-Versionen sind nicht vorinstalliert realpath) und kopiere es.
  • vom zweiten Terminal aus benutze ich scp oder sftp, um die Datei abzurufen, und füge den vollständigen Pfad ein, den ich zuvor hatte. Zum Beispiel: scp [email protected]:/etc/some/file ./

Es ist ziemlich einfach, aber es ist auch leicht zu merken und benötigt kein zusätzliches Paket, um zu funktionieren.

get the full path from first terminal, and then paste in the second terminal

0
gerlos

Überraschenderweise sehe ich hier keine Erwähnung des guten alten Midnight Commander. Meiner Meinung nach ist es wahrscheinlich der universellste und nützlichste Dateimanager für Shell mit Power-Funktionen, eines der "Must-Have" -Tools für diesen Fall, mit dem Sie sich auch über SSH, FTP und SFTP verbinden können, während Sie aktiv sind Im zweiten Bereich können Sie jedes andere (lokale) Dateisystem öffnen und so frei mit Dateien arbeiten.

Alles was Sie brauchen ist: apt-get install mc (aus dem Universum)

Führen Sie danach mc aus, öffnen Sie das Menü für das linke oder rechte Bedienfeld, wählen Sie "Shell-Verbindung", geben Sie den Benutzernamen @ remote-ip und das Kennwort ein. Das war's. Kopieren Sie (hier: Herunterladen) Dateien/Ordner von einem Computer auf einen anderen mit F5, bewegen Sie sich mit F6 usw. gemäß den unten stehenden Tasten. Für die alten MS-User: genau wie in NC für DOS

0
Nex0